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