这里可能有数百个关于浮点舍入误差的问题,解决方案应该是区间运算,它有助于跟踪它们。我想试试这个,我尝试安装pyinterval。
不幸的是,它似乎没有起作用。对于浮点误差的这种微不足道的情况,我希望有一个2个数字的间隔,比实际答案高一个,低一个(0.001):
>>> from interval import interval
>>> interval(1.001)-1
interval([0.0009999999999998899])
经过一番搔痒之后,我最好的猜测是在传递给间隔模块之前将数字1.001转换为单个浮点值,所以我尝试使用浮点fpu.up和fpu.down函数来强制转换:
>>> from interval import fpu
>>> fpu.down(lambda : float("1.001")-1)
0.0009999999999998899
>>> fpu.up(lambda : float("1.001")-1)
0.0009999999999998899
知道出了什么问题吗?或者我对这应该如何工作有错误的结论?
我在darwin上使用x86 mac与“Python 2.7.1(r271:86832,2011年1月1日,22:28:41)[GCC 4.2.1(Apple Inc. build 5664)]”
答案 0 :(得分:0)
看起来字符串到浮点数的转换不符合舍入,但如果我通过输入1.001作为1001/1000手动执行,我会得到我期待的那种东西:
>>> (interval[1001]/1000)-1
interval([0.0009999999999996678, 0.001000000000000112])