It is typical that simple decimal fractions like 0.1
or 0.7
cannot be converted into their internal binary counterparts without a small loss of precision. This can lead to confusing results: for example,floor((0.1+0.7)*10)
will usually return 7
instead of the expected 8
,since the internal representation will be something like 7.9
.
This is due to the fact that it is impossible to express some fractions in decimal notation with a finite number of digits. For instance,1/3
in decimal form becomes 0.3
.
So never trust floating number results to the last digit,and never compare floating point numbers for equality. If higher precision is necessary,07001 and 07002 functions are available.