我被要求测试由第三方提供的库。已知库精确到n有效数字。任何不太重要的错误都可以安全地忽略。我想写一个函数来帮助我比较结果:
def nearlyequal( a, b, sigfig=5 ):
此函数的目的是确定两个浮点数(a和b)是否近似相等。如果a==b(完全匹配),或者a和b的值在小数点后四舍五入为有效数字时相同,则函数将返回True。
有人能提出一个好的实施方案吗?我写了一个小单元测试。除非你能在我的测试中看到一个bug,否则一个好的实现应该通过以下几点:
assert nearlyequal(1, 1, 5)
assert nearlyequal(1.0, 1.0, 5)
assert nearlyequal(1.0, 1.0, 5)
assert nearlyequal(-1e-9, 1e-9, 5)
assert nearlyequal(1e9, 1e9 + 1 , 5)
assert not nearlyequal( 1e4, 1e4 + 1, 5)
assert nearlyequal( 0.0, 1e-15, 5 )
assert not nearlyequal( 0.0, 1e-4, 6 )
附加说明:
这是一张照片。
在
numpy.testing
(源here) )中有一个函数assert_approx_equal
,这可能是一个很好的起点。从Python 3.5开始,执行此操作的标准方法(使用标准库)是使用^{} 函数。
它有以下签名:
使用绝对误差公差的示例:
如果需要精度为n有效数字,只需将最后一行替换为:
相关问题 更多 >
编程相关推荐