Re: [eigen] Arbitrary precision arithmetic support in Eigen |

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] Arbitrary precision arithmetic support in Eigen*From*: Pavel Holoborodko <pavel@xxxxxxxxxxxxxxx>*Date*: Thu, 15 Jul 2010 15:37:49 +0900*Cc*: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>, Konstantin Holoborodko <konstantin@xxxxxxxxxxxxxxx>

Hi Gael!

I am very thankful for your warm acceptance of MPFR C++.

Thank you for your support!

1.

I've added 3 new functions to MPFR C++ library:

mpfr::machine_epsilon(prec) // the smallest eps such that 1+eps != 1 for the precision prec

mpfr::mpreal_min(prec) // the largest positive number presentable in precision prec and current exponent range

mpfr::mpreal_max(prec) // the smallest positive number presentable in precision prec and current exponent range

They do not use pow, only simple and fast operations.

Also I've changed mpreal_eigen.h to embed updated MPFR C++.

MPFR C++:

http://www.holoborodko.com/pavel/wp-content/plugins/download-monitor/download.php?id=4

mpreal_eigen.h:

http://www.holoborodko.com/pavel/wp-content/plugins/download-monitor/download.php?id=9

I would appreciate any tests, or further suggestions.

2.

I am very glad you fixed bug in ei_aligned_delete().

I believe that was the bug users complain about in KDE forum.

(crash on memory deallocation for dynamic matrices using mpreal)

http://forum.kde.org/viewtopic.php?f=74&t=43643.

3.

On where to put such a header file.

I agree with you that it would be convenient for users to include MpfrSupport.h into Eigen itself.

Please do it.

One issue is maintenance of MpfrSupport.h upon changes in MPFR C++.

I think we can manage to do that properly and timely.

Thank you! And please keep me updated.

All the best,

Pavel Holoborodko

http://holoborodko.com/pavel/

On Thu, Jul 15, 2010 at 5:27 AM, Gael Guennebaud <gael.guennebaud@xxxxxxxxx> wrote:

while trying to write proper unit tests, I hit the following issue:

mpfr::pow(2,-mpfr::mpreal::get_default_prec())

which is used to compute the epsilon takes forever... Is it "normal" ??

The following runs fine though:

mpfr::mpreal x = 1;

for(int i=0; i<mpfr::mpreal::get_default_prec(); ++i)

x = x/2;

Also is there an easy way to get the highest and lowest representable

values ? They are needed for some operations in Eigen3.

cheers,

gael.

On Wed, Jul 14, 2010 at 9:24 PM, Gael Guennebaud

<gael.guennebaud@xxxxxxxxx> wrote:

> ok, I could not resit to adapt it for Eigen3. Actually this is very

> useful to stress Eigen with scalar types having non trivial ctor/dtor

> (i.e., allocating/freeing memory), and bingo (!) there was a bug in

> ei_aligned_detete() for null pointers ;)

>

> gael

>

>

> On Wed, Jul 14, 2010 at 4:06 PM, Gael Guennebaud

> <gael.guennebaud@xxxxxxxxxx> wrote:

>> Hi Pavel,

>>

>> thank you for your email. This is excellent!

>>

>> Actually, the possibility to use arbitrary precision scalar types is

>> one of the main argument I often use to sell Eigen. So having an

>> officially supported module for your lib with extensive testing is

>> something I wanted to do for a while, but you know there are always so

>> many things to do.

>>

>> So I'm really glad to see you added support for Eigen ;) I will add a

>> word on the website.

>>

>> What to do next?

>>

>> You said there is a lack of extensive testing. Since all our efforts

>> are now focused on the next Eigen version, Eigen3 which should be

>> release within a few months I'd rather spend time testing MPFR support

>> on Eigen3 than Eigen2. However, the way to add support for custom

>> scalar types slightly change. Fortunately, based on your current

>> support header file this should not be difficult. I can have a look at

>> it myself.

>>

>> One leading question is where to put such an header file? Within Eigen

>> as a (MpfrSupport module) or as a standalone file as it is currently

>> the case? The main advantage I see in having it in Eigen itself is

>> that should simplify to had full and continuous testing What do you

>> think?

>>

>> Finally, once MPFR C++ will use _expression_ template, adding a good

>> support for Eigen-MPFR C++ that leverages ET at both the matrix and

>> scalar type level will be more tricky because Eigen will have to know

>> about the returned _expression_ types of the mpreal operations. We

>> currently do not have an easy solution for that but this is something

>> we have to workout anyway for many other use cases (e.g., to nest

>> Eigen's Matrix/Array types, for automatic differentiation, etc..)

>>

>> cheers,

>>

>> gael

>>

>>

>>

>>

>>

>> On Wed, Jul 14, 2010 at 7:01 AM, Pavel Holoborodko

>> <pavel@xxxxxxxxxxxxxxx> wrote:

>>> Hello Everyone!

>>>

>>> First of all I would like to thank all the developers for the this

>>> beautifully designed and implemented library!

>>> I've learned a lot looking over it.

>>>

>>> I'm developer of C++ interface for the arbitrary precision floating point

>>> arithmetic library MPFR: http://www.holoborodko.com/pavel/?page_id=12.

>>>

>>> During last year I've received couple of questions from the users on how to

>>> use my wrapper together with Eigen. There was discussion in KDE forum on the

>>> topic but it seems that not all problems were solved:

>>> http://forum.kde.org/viewtopic.php?f=74&t=43643.

>>>

>>> Recently the most complete (hopefully:)) bridge for embedding mpreal type

>>> into Eigen was created.

>>> Please check home page under "Software using MPFR C++" for header file

>>> mpreal_eigen.h:

>>> http://www.holoborodko.com/pavel/?page_id=12.

>>>

>>> So, now user can equip Eigen with arbitrary precision arithmetic by:

>>> 1. Installing MPFR and GMP libraries.

>>> 2. Using MPFR C++ interface (mpreal.h, mpreal.cpp) along with header file

>>> mpreal_eigen.h

>>> 3. Using mpreal type (provided by MPFR C++) instead of built-in type double

>>> or float.

>>>

>>> Precision (number of bits used for significant) can be setup globally by

>>> mpreal::set_default_prec().

>>> For instance double has only 53 bits precision with machine epsilon 1e-16

>>> (maximum 16 correct digits).

>>> Using mpreal user can do calculations with any precision, e.g. 1024 bits

>>> with machine epsilon 1e-309 (309 correct digits).

>>>

>>> I would appreciate if someone who intensively use/develop Eigen would test

>>> how MPFR C++ works with Eigen.

>>>

>>> Any suggestions for improvement, test reports, etc. are very very welcome.

>>>

>>> Also I would appreciate if Eigen webpage or documentation will reference

>>> such possibility on using arbitrary precision arithmetic.

>>> I think, this option could be very useful for the users.

>>>

>>> Besides reference on my site would give me huge support and motivation for

>>> further improvement.

>>>

>>> All the best,

>>>

>>> Pavel Holoborodko.

>>> http://holoborodko.com/pavel/

>>>

>>> P.S.

>>> I'm planning to release new version of MPFR C++ soon based on _expression_

>>> templates inspired by Eigen.

>>>

>>>

>>

>

**Follow-Ups**:**Re: [eigen] Arbitrary precision arithmetic support in Eigen***From:*Gael Guennebaud

**References**:**[eigen] Arbitrary precision arithmetic support in Eigen***From:*Pavel Holoborodko

**Re: [eigen] Arbitrary precision arithmetic support in Eigen***From:*Gael Guennebaud

**Re: [eigen] Arbitrary precision arithmetic support in Eigen***From:*Gael Guennebaud

**Re: [eigen] Arbitrary precision arithmetic support in Eigen***From:*Gael Guennebaud

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] discrepancy in (triangular view + transpose) and self-adjointness** - Next by Date:
**Re: [eigen] Arbitrary precision arithmetic support in Eigen** - Previous by thread:
**Re: [eigen] Arbitrary precision arithmetic support in Eigen** - Next by thread:
**Re: [eigen] Arbitrary precision arithmetic support in Eigen**

Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |