Floating point problems

David Roundy droundy at darcs.net
Thu Aug 31 14:35:22 EDT 2006


On Thu, Aug 31, 2006 at 07:44:33AM +0200, Florian Weimer wrote:
> * > On Wed, 2006-08-30 at 14:58 -0400, David Roundy wrote:
> >> It's sad, but we're stuck with it, as I'm not aware of any
> >> compiler that is capable of generating IEEE arithmetic.
> >
> > Gcc man page:
> >
> > -ffast-math
> 
> You quoted the wrong paragraph.  Here's the right one:
> 
> `-ffloat-store'
>      Do not store floating point variables in registers, and inhibit
>      other options that might change whether a floating point value is
>      taken from a register or memory.
> 
>      This option prevents undesirable excess precision on machines such
>      as the 68000 where the floating registers (of the 68881) keep more
>      precision than a `double' is supposed to have.  Similarly for the
>      x86 architecture.  For most programs, the excess precision does
>      only good, but a few programs rely on the precise definition of
>      IEEE floating point.  Use `-ffloat-store' for such programs, after
>      modifying them to store all pertinent intermediate computations
>      into variables.

But alas, in my experience even -ffloat-store doesn't allow truly
reproducible arithmetic, although it's much better than the default
behavior.  I struggled with this quite a while, a few years back, when
trying to implement tests that my parallelization would produce
bitwise identical results to the serial version.  I needed both
-ffloat-store and some code-hacks to keep the compiler from doing
anything tricky (but don't quite remember what...).
-- 
David Roundy


More information about the Glasgow-haskell-users mailing list