Re:0.30000000000000004
by static_noise on Friday November 13, 2015 @08:48AM
(#10559786)
When your compiler does its internal calculations in double precision float you are right.
But why should it do so? Do all languages specify the details of how floating point input is handled by the compiler/interpreter?
Most languages do (though implementation bugs are common—plenty of languages where 64-bit precision is required actually end up being implemented in such a way that 80-bit precision is used on x86).
That said, a lot of low-level languages don't: C doesn't guarantee this, for example. C doesn't even mandate IEEE 754, and it merely requires that "float" is a subset of the values of "double" which is itself a subset of the values of "long double".
It's perfectly well-specified. If you are using double-precision floating point, "0.3" means 0x3fd3333333333333 (as bits), or 0.299999999999999988897769753748434595763683319091796875 (as an exact number: the closest representable number to 0.3).