float has too much precision
    Steven Schveighoffer 
    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 
80-bit reals.
Also possible that some optimization is figuring out that it can just 
return 35f?
Try instead:
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.
-Steve
    
    
More information about the Digitalmars-d-learn
mailing list