如何轻松处理 python 中的浮点数错误?
How can I easily handle floating point inaccuracies in python?
我正在生成一个数组,由于浮点数不准确,它包含非常相似但不相等的值。以下是数组开头的示例元素:
[1.6666666666651508, 1.6666666666651508, -0.9999999999990905, -0.6666666666660604, 1.6666666666651504, 0.0, 0.0, -1.6666666666651513, 0.0, 0.0, 0.0, 1.6666666666651493, 0.0, 1.6666666666651493, 1.6666666666697005, 3.3333333333302986, 3.333333333334846, 3.3333333333348536, 3.3333333333302986,...]
我想在固定位置对这些数字进行切片以删除它们(在更大的上下文中对我的代码至关重要,不会出现这些不准确之处)。我尝试用 0b111.1111111 (= 7.9921875)
对其进行位掩码,但显然 python 不支持浮点数上的 &
。我试图移动它们,将它们转换为整数,然后使用 &
,但我无法完成它。
现在,我想知道是否有一种简单的方法来屏蔽浮点数,或者 python 中是否有另一种方法可以在特定位置后分割浮点数或修复此问题。
一种方法是将其四舍五入,虽然会稍微降低准确性。例如,使用这个:
i = 5/3
print(i)
i = round(i, 10)
print(i)
这可能会打印:
1.66666666666692
1.66666666666
我正在生成一个数组,由于浮点数不准确,它包含非常相似但不相等的值。以下是数组开头的示例元素:
[1.6666666666651508, 1.6666666666651508, -0.9999999999990905, -0.6666666666660604, 1.6666666666651504, 0.0, 0.0, -1.6666666666651513, 0.0, 0.0, 0.0, 1.6666666666651493, 0.0, 1.6666666666651493, 1.6666666666697005, 3.3333333333302986, 3.333333333334846, 3.3333333333348536, 3.3333333333302986,...]
我想在固定位置对这些数字进行切片以删除它们(在更大的上下文中对我的代码至关重要,不会出现这些不准确之处)。我尝试用 0b111.1111111 (= 7.9921875)
对其进行位掩码,但显然 python 不支持浮点数上的 &
。我试图移动它们,将它们转换为整数,然后使用 &
,但我无法完成它。
现在,我想知道是否有一种简单的方法来屏蔽浮点数,或者 python 中是否有另一种方法可以在特定位置后分割浮点数或修复此问题。
一种方法是将其四舍五入,虽然会稍微降低准确性。例如,使用这个:
i = 5/3
print(i)
i = round(i, 10)
print(i)
这可能会打印:
1.66666666666692
1.66666666666