float has too much precision
schveiguy at gmail.com
Tue Apr 21 20:10:03 UTC 2020
On 4/21/20 3:47 PM, Faux Amis wrote:
> I'm dumbfounded, why does the following code write '35' on DMD32 D
> Compiler v2.091.0-dirty?
> module magic;
> float magic( float f )
> return f + 35f - f;
> void main()
> import std.stdio;
> writeln( magic(1_000_000_000f) );
On run.dlang.io, it prints 64. Also on my mac.
Possibly it's working because intermediate floating point calculations
are generally done at max precision. On your system, that might be
Also possible that some optimization is figuring out that it can just
float magic( float f)
float result = f + 35f;
return result - f;
Is it worth worrying about? floating point is supposed to be inexact and
subject to variance on different machines.
More information about the Digitalmars-d-learn