ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> boost
boost
Re: [boost] [mpl][math] double accuracy
by Peder Holt other posts by this author
Sep 29 2005 12:08PM messages near this date
Re: [boost] [mpl][math] double accuracy | Re: [boost] [mpl][math] double accuracy
SOURCE On 9/25/05, Andy Little <andy@[...].uk>  wrote:
> 
>  "Peder Holt" <peder.holt@[...].com> wrote in message
>  news:4c1c5632050924115073d9251c@[...]..
>  > What should we do about the accuracy of double_ operations?
>  >
>  > The implementation of plus,minus,times and divide mimics the behaviour
>  > of the runtime equivalent, double. This means that the mantissa is
>  > trunkated from 61 to 52 bit for every fundamental operation. The
>  > result of this, is that complex functions such as sine and exponential
>  > will differ from their runtime counterpart, unless a specialization is
>  > made for double_. The problem would disappear if we allow calculations
>  > with double_ to be more accurate than calculations with double. Is
>  > this a problem?
> 
>   There is neverending discussion on comp.lang.c++.mod regarding differences
>  between runtime floats on various platforms. IMO this is an ideal opportunity to
>  create a platform independent floating point type, IOW one with an exact length
>  of  mantissa and exponent specified and with a consistent policy on rounding
>  etc. I think this is how it is done in Java though the only link I can find
>  is:http://www.concentric.net/~Ttwang/tech/javafloat.htm
>  Other question is ... What sort of rounding do you use?

For multiplication and division operations:
If the 53'rd bit is 1, add 1 to the 52'nd bit.
For addition/subtraction
Ignore extra bits, cutoff after the 52'nd bit.

This mimics the behaviour of the VC compilers.

>  Also ... I'm assuming it is simple enough to program the length of mantissa and
>  exponent?.

To a certain extent...
I use two 32 bit integer types to represent the mantissa, and two bits
are lost to overflow control. The last bit is the hidden 1 that
preceeds the mantissa in the double representation. It is possible to
add more integers to represent the mantissa, but it would involve some
work to get it right. Certainly doable, though.
The exponent is much simpler, as I currently only use 11 bit out of 16
(potentially 32)


>  By making them length adjustable you would be able to regain
>  platform dependence via typedefs where required. thus providing the best of both
>  worlds.

Not a bad idea :) Probably best to start with the run-time adjustable
floating point, then extend it to compile-time.

Regards,
Peder

> 
>  regards
>  Andy Little
> 
> 
> 
> 
> 
>  _______________________________________________
>  Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
> 

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Thread:
Peder Holt
David Abrahams
Andy Little
Peder Holt
Matthias Troyer

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved