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: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>
- Date: Wed, 14 Jul 2010 22:27:20 +0200
- Cc: Pavel Holoborodko <pavel@xxxxxxxxxxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:in-reply-to :references:from:date:message-id:subject:to:cc:content-type :content-transfer-encoding; bh=WmXpA3K60o/hOacmIlRwdUR123bH1w52hJ5viC8Yx6k=; b=JSFet3yTui00t+TvPHAXm4NIN3tbUMg9H+S8zOXVrryZUpck42MSMrVdX6HzKYjCxW 6drDgTkDJOhEU/13h3+bhdYWUymtwwlR5Vy5Y1FpTgJRnDYekZxTfek8JRguHwheyRGc x2JNfwsfcsrkH43Idf2lFmir7qhlbIuRgBuCo=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; b=iNSMao/6ib5MmVcRvcbCvuiWhshCCXjHL5FjwtnLETw05q0hhZV2BwE4UJaE21Pybw d3oEnxjKhHoKDImd5R9ZxRM9ci8aCe0rgkaWnjswyHAX8cGCrEl2CcFD95n1hJa82Je+ 4B1vpEag/iR61wjWU0OqWpL0P992r5Csmbrf4=
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@xxxxxxxxx> 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.
>>>
>>>
>>
>