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

Reply via email to