Fun with floating point

Kenny via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Feb 8 00:46:39 PST 2015


> There is no right or wrong when you compare floating point 
> values for equality (and inequality) unless those values can be 
> represented exactly in the machine. 1.0 is famously not 
> representable exactly. (It is similar to how 1/3 cannot be 
> represented in the decimal system.)

Here I tested one aspect of IEEE-754 floating point behavior (not 
ordinary floating point calculations for daily job). All integers 
can be represented exactly until some maximum value.

I believe that first section from http://dlang.org/float.html 
explains why behavior of my program should not be considered a 
bug in the compiler. But does it mean that due to these rules the 
results of the computation are not according to IEEE-754 for some 
specified floating point format (32 bit single precision in my 
examples)?

For example, according to IEEE-754 specification if we work with 
32bit floating point numbers (floats in D) then the following 
pseudo code prints 'Works'.

F32 f = 16777216.0f;
F32 f2 = f + 0.1f;
if is_the_same_binary_presentation(f, f2)
   Print("Works");

As I understand D does not guarantee this. Please confirm if it's 
correct.


More information about the Digitalmars-d-learn mailing list