float equality
Simon Buerger
krox at gmx.net
Sat Feb 19 04:47:41 PST 2011
On 19.02.2011 13:06, spir wrote:
> Hello,
>
> What do you think of this?
>
> unittest {
> assert(-1.1 + 2.2 == 1.1); // pass
> assert(-1.1 + 2.2 + 3.3 == 4.4); // pass
> assert(-1.1 + 3.3 + 2.2 == 4.4); // fail
> assert(-1.1 + 3.3 == 2.2); // fail
> }
>
> There is approxEquals in stdlib, right; but shouldn't builtin "==" be
> consistent anyway?
>
> Denis
It is generally a bad idea to use "==" with floats, as most decimals
cant be represented exact in binary floating point. That means there
is no float for the value "1.1". Though there are exact floats for
0.25, 0.5, 42.125 and so on. The only reason the first two testcases
work is, that it is rounded the same way both sides of the "==" but
you should not rely on that.
Also note, that these calculations are probably done at compile-time,
and the compiler is allowed to use a higher precision than at
run-time, so you might get different result when you let the user
input the numbers.
- Krox
More information about the Digitalmars-d
mailing list