一直在数值稳定性方面发挥作用,发现了这一点:
>>> sum([1e4,1e20,-1e20])
16384.0
任何想法为什么会这样?
前两个数字不能精确求和,因为Python的浮点表示不支持那么多有效的十进制数字(它支持16个数字,而总和要求精确地表示17个数字)。Python在尾数的最低有效部分中仅用一点就可以逼近答案。
将第三个数字相加后得到的答案与期望的答案之间的差异表示中间结果表示中的错误。减去之后,剩下的全部就是尾数了。当指数归一化时,剩下的就是16384。这是两个幂的事实,您可以根据实际情况进行操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句