【发布时间】:2011-05-01 01:02:22
【问题描述】:
在 python 中是否有测试浮点近似相等的函数?类似的,
def approx_equal(a, b, tol):
return abs(a - b) < tol
我的用例类似于 Google 的 C++ 测试库 gtest.h 定义 EXPECT_NEAR。
这是一个例子:
def bernoulli_fraction_to_angle(fraction):
return math.asin(sqrt(fraction))
def bernoulli_angle_to_fraction(angle):
return math.sin(angle) ** 2
def test_bernoulli_conversions():
assert(approx_equal(bernoulli_angle_to_fraction(pi / 4), 0.5, 1e-4))
assert(approx_equal(
bernoulli_fraction_to_angle(bernoulli_angle_to_fraction(0.1)),
0.1, 1e-4))
【问题讨论】:
-
我想你刚刚写的!
-
:) 我只是想他们可能是这个的一个模块......
-
嗯,一个潜在的问题是
tol可能只大约等于您想要的值。 -
您不应该与单个容差值进行比较,因为非常大的数字和非常小的数字具有不同的容差。 Numpy 的
spacing()函数会告诉你给定浮点数和最近的浮点数之间的距离,这可能是一种很好的测试方法。 -
Numpy 的
spacing函数的文档位于 github.com/numpy/numpy/blob/master/numpy/core/code_generators/…(它不会出现在正常的 Google 搜索中)。
标签: python comparison floating-point