为什么小数不能精确地用二进制表示?
有几个关于浮点表示法的问题贴在了上面。例如,小数0.1没有精确的二进制表示,因此使用=运算符将其与另一个浮点数进行比较是危险的。我理解浮点表示法背后的原则。
我不明白的是,为什么从数学的角度来看,小数点右边的数字比左边的数字更“特殊”呢?
例如,数字61.0具有精确的二进制表示,因为任何数字的整数部分总是精确的。但数字6.10并不准确。我所做的只是把小数点移了一个位置,然后我突然从Exactopia移到了Indextville。从数学上讲,这两个数字之间应该没有本质上的区别-它们只是数字。
相反,如果我将小数点移到另一个方向产生610,我仍然在Exactopia。我可以继续往那个方向走(6100,610000000,610000000000000),它们仍然是精确的,精确的。但一旦小数点跨过某个阈值,数字就不再准确。
到底怎么回事?
编辑:为了澄清,我想远离讨论行业标准的表示,如ieee,并坚持我认为是数学上“纯”的方式。在基数10中,位置值是:
... 1000 100 10 1 1/10 1/100 ...
在二进制文件中,它们将是:
... 8 4 2 1 1/2 1/4 1/8 ...
对这些数字也没有任意的限制。位置无限期地向左和向右增加。