|
发表于 2020-3-15 00:38:38
|
显示全部楼层
本帖最后由 jackz007 于 2020-3-15 09:29 编辑
在计算机内部,一个浮点数是通过四个字节的组合来进行表达的,称为 32 位浮点,四个字节根据 IEEE 浮点数编码规范来表达一个浮点数。我们知道,四个字节最多可以表达 0xFFFFFFFF = 429467295 个不同的数值,可以想象,32 位浮点所能表达不同浮点数的数量也是有限的。
考虑一下用 5 个数来表达 0 ~ 20之间的不同数值,这 5 个数必然是 0、5、10、15、20,那么,根据四舍五入的原则,2 会表达为 0,8 、10、12 会表达为 10,13 会被表达为 15,18、19、20 会被表达为 20,这种情形就是近似表达。4 个字节对数值的表达能力有限,而我们对浮点数表达能力的预期却是无限的,用有限数量的数值来表达无限数量的浮点数,这就决定了浮点数的表达必然是近似的。也就是说,对浮点数而言,不可能做到想表达多少就能得到多少,存在误差将是必然的。就好比前面例子中的 8、10、12 三个完全不同的数都会表达为 10 的情形,因为在 5 个数值的表达体系中,8 和 12 根本就不存在。
所以,任何时候,浮点数运算出现一些细微的误差完全不必理会和在意,一切都是正常的。 |
|