在SO上发布了几个关于浮点表示的问题,例如小数0.1没有精确的二进制表示,因此使用“==”运算符将其与另一个浮点数进行比较是危险的。我理解浮点表示背后的原理。但我不明白的是,从数学角度讲,为什么小数点右侧的数字比左侧的数字更加“特殊”?例如,数字61.0具有精确的二进制表示,因为任何数字的整数部分始终是精确的。但数字6.10就不是精确的了。我只是把小数点向右移动了一位,突然间从精确到不精确。在数学上,这两个数字之间应该没有内在的区别--它们只是数字而已。相反,如果我向左移动小数点一位,得到数字610,我仍然处于精确状态。我可以一直朝着这个方向走(6100、610000000、610000000000000),它们仍然是精确的。但是一旦小数点超过某个阈值,数字就不再精确了。发生了什么?编辑:为了澄清,我想避免讨论诸如IEEE等行业标准表示法,并坚持我认为的数学“纯粹”方式。 在十进制中,位值是:
... 1000 100 10 1 1/10 1/100 ...
在二进制中,它们将会是:
... 8 4 2 1 1/2 1/4 1/8 ...
这些数字也没有任何限制。数字的位置从左到右无限增加。