from numpy.testing import assert_almost_equal
a = 0.000000001
b = 0.0000000001
>>> assert_almost_equal(a, b)
# Nothing returned.
b = 1
>>> assert_almost_equal(a, b)
AssertionError:
Arrays are not almost equal to 7 decimals
ACTUAL: 1e-09
DESIRED: 1
答案相当复杂,因为您需要知道如何保存单精度或双精度浮点(Wikipedia),根据经验法则,您可以使用this Table on Wikipedia作为选择epsilon的参考。但是可能会有一些例外,特别是如果您不完全知道它是float32还是float64(或者对于Linux/Mac,还有float96和float128)。
为此,
numpy
中有一个assert函数,默认使用七个十进制精度。如果您正在寻找有史以来最好的epsilon,要获得最好的比较,可以使用python的sys epsilonusing:
但如果你更希望根据你的a和b动态地得到这个epsilon,我建议你:
或者
答案相当复杂,因为您需要知道如何保存单精度或双精度浮点(Wikipedia),根据经验法则,您可以使用this Table on Wikipedia作为选择epsilon的参考。但是可能会有一些例外,特别是如果您不完全知道它是float32还是float64(或者对于Linux/Mac,还有float96和float128)。
但我想最好的做法是使用一些预定义的函数,比如numpy_assert_array_almost_equal(需要numpy)。
我想每个人的处理方式都有所不同,只要你能相信你的结果,每种方法都有其利弊。而且要记住,float可能会因为错误的算术运算而完全混乱。i、 e.计算大值的微小差异。最后,epsilon的值取决于你需要什么样的精度,并且应该在那里进行测试。
相关问题 更多 >
编程相关推荐