Nik*_*s R 60 python floating-point unit-testing
我有一个Vector类代表三维空间中的一个点.该向量具有normalize(self, length = 1)向下/向上缩放向量的方法length == vec.normalize(length).length.
由于浮点数不精确,此方法的unittest 有时会失败.我的问题是,如何在正确实施方法时确保此测试不会失败?是否可以在不测试近似值的情况下进行?
其他信息:
def testNormalize(self):
vec = Vector(random.random(), random.random(), random.random())
self.assertEqual(vec.normalize(5).length, 5)
Run Code Online (Sandbox Code Playgroud)
这有时导致AssertionError: 4.999999999999999 != 5或者AssertionError: 5.000000000000001 != 5.
注意:我知道浮点问题可能在Vector.length属性中或在Vector.normalize().
Rik*_*ggi 104
用assertAlmostEqual,assertNotAlmostEqual.
从官方文档:
assertAlmostEqual(first, second, places=7, msg=None, delta=None)
Run Code Online (Sandbox Code Playgroud)
通过计算差值,舍入到给定的小数位数(默认值为7)并比较为零,测试第一个和第二个大致相等.
没有.
该浮点问题无法绕过,所以你或者"圆圆"将给出结果vec.normalize,或接受一个几乎相等的结果(这两个中的每一个是一个近似值).