Le 2012-03-09 à 08:32:00, Roman Haefeli a écrit :
But 0.1 still cannot be represented exactly by float64, can it?
It can't. It also doesn't work for any other form of binary floating point. It's just that float64 is a lot closer to exact than float32 can be, and so on.
0.1 = 1/10 = 1/(2*5) in prime factors.
This means both 2 and 5 need to be present as prime factors in the base of the format, to have an exact fraction for it. So, decimal floats obviously can, and the only other bases that allow it are multiples of 10.
for 1/44100 = 1/(2*2*3*3*5*5*7*7), the smallest base to do it exactly is 2*3*5*7 = 210.
for 1/48000 = 1/(2*2*2*2*2*2*2*3*5*5*5), the smallest base to do it exactly is 2*3*5 = 30.
I'm just saying that as examples of the principle for exact fractions ; in practice, bases that aren't binary nor decimal are rarely ever used, and decimal floats are almost only used as textfile versions of binary floats (such as in the pd file format and most programming languages).
| Mathieu BOUCHARD ----- téléphone : +1.514.383.3801 ----- Montréal, QC