我有课Vector代表 3 维空间中的一个点。这个向量有一个方法normalize(self, length = 1)
将矢量缩小/放大为length == vec.normalize(length).length
.
该方法的单元测试有时由于浮点数的不精确性而失败。我的问题是,当方法正确实现时,如何确保该测试不会失败?是否可以做到without测试一个近似值?
附加信息:
def testNormalize(self):
vec = Vector(random.random(), random.random(), random.random())
self.assertEqual(vec.normalize(5).length, 5)
This 有时结果要么AssertionError: 4.999999999999999 != 5
or AssertionError: 5.000000000000001 != 5
.
Note:我知道浮点问题可能出现在Vector.length
财产或在Vector.normalize()
.
1)如何确保测试有效?
Use assertAlmostEqual
, assertNotAlmostEqual
.
来自官方文档 http://docs.python.org/library/unittest.html#unittest.TestCase.assertAlmostEqual:
assertAlmostEqual(first, second, places=7, msg=None, delta=None)
通过计算差值、四舍五入到给定的小数位数(默认 7)并与零进行比较来测试第一和第二是否近似相等。
2)是否可以在不测试近似值的情况下做到这一点?
本质上没有。
The 浮点问题 http://docs.python.org/tutorial/floatingpoint.html无法绕过,因此您必须“四舍五入”给出的结果vec.normalize
或接受几乎相等的结果(两者都是近似值)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)