Ein float wird intern durch 32 Bit repräsentiert, damit sind logischerweise nicht allen reelen Zahlen darstellbar.
Insbesondere gelten -- wie von Robert schon angesprochen -- *nicht* die von den reelen Zahlen vertrauten Rechenregeln!
So ist i.a
a+(b+c) != (a+b)+c
a*(b*c) != (a*b)*c
a*(b+c) != a*b+a*c
etc. und besonders tückisch:
a != b folgt nicht a-b != 0, was zu Laufzeitfehlern beim Dividieren füren kann:
if (a != b)
quot = 1.0 /(a-b); // *AUTSCH*, Divisor kann 0 sein !!!
Weil maximal 2^32 verschiedene reele Zahlen darstellbar sind, gibt es zwischen den Zahlen immer Lücken. Diese Lücken werden um so größer, je größer die darzustellenden Zahlen betragsmässig sind.
Lesezeichen