python计算器的奇葩问题

这个问题我记得还改进过一次啊,我们知道十进制小数是分母是10^n的分数,而浮点数用二进制表示,所以大部分情况下十进制的有限小数在二进制当中是无限循环小数,那么用有限的精度其实是表示不出来的,会近似取到最接近的一个有限小数上。以前Python显示这种数就会变成一堆99999或者000001,后来做了一个改进,在repr显示浮点数的时候,永远显示成能表示成这个二进制形式的最短的有限小数。但是你有加减的时候问题又不一样了,舍去的部分误差会累积,这样累加过之后误差可能会超过十进制真值一个有效数字位数,那结果就会变成不精确的。两个数相加的话,结果会不会超过容许误差范围,取决于两次舍入的方向是否一致、两次舍入的大小、还有两个相加的数的阶数是否一致等等。实际上熟悉数值计算的人都知道,当你使用浮点数的时候,你就再也不要想计算精确值这回事了,每一步运算基本上都会产生误差,对误差的分析(比如误差是否会累积,是否能够收敛)也是数值计算的一项基本功。
■网友
IEEE floating point几乎所有的编程语言都是这样的,自己没文化就不要随便说别人奇葩
■网友
因为二进制表示不了小数, 只能用趋近值 14. 浮点数算法:争议和限制


    推荐阅读