4 ms·
It's actually pretty simple, if you've taken prime number theory. FTFY
by micahbright 10y ago
It's actually pretty simple, if you've taken prime number theory.
FTFY
- FabHK 10y ago> It's actually pretty simple, if you've taken prime number theory. Or if it's explained a bit more intuitively. A terminating decimal fraction 0.xyz (in base 10) is basically xyz / 1000 Now, 1000 = 2x5 x 2x5 x 2x5. So, if you have any fraction n / d, and the denominator d has only factors 2 and 5, then you can "fill up" the remaining 2's or 5's to get a power of 10, and write it as a terminating decimal fraction: 3 / 25 = 3 * 4 / (25 * 4) = 12/100 = 0.12 7 / 8 = 7 * 125 / (8 * 125) = 875/1000 = 0.875 etc. But, if the denominator d has any factors other than 2's and 5's, there is just no way you can multiply any further integers with it to get a power of ten. A decimal floating point would then be not only 0.875, say, but 0.0000875 or 875000. So, now you say: 875/1000 x 10^E, where the 875 is your (3-digit) mantissa and the E your exponent. But that's still always an integer divided by a power of 10. So, if what we try to represent is a fraction with a denominator that has prime factors other than 2 and 5, there's no way we can represent it as a floating point decimal fraction. Similarly, a IEEE 754 floating point is basically 10011010101 / 2^53 * 2^E (with some abuse of notation, where the first part is a binary mantissa...). But, that's fundamentally still an integer divided by a power of 2. So, if what we try to represent is a fraction with a denominator that has prime factors other than 2, there's no way we can represent it as a floating point binary fraction, and therefore not as a Float64. Edit: use x for multiplication to avoid italics...