gpt4 book ai didi

Python 单元测试 : Test whether two angles are almost equal

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:41 24 4
gpt4 key购买 nike

我想测试一个以度为单位输出航向的函数,它是区间 [0, 360) 中的一个数字。由于结果是一个 float ,因此使用 unittest.assertEqual() 将实际结果与预期结果进行比较是行不通的。 unittest.assertAlmostEqual() 更好,因为它提供了容差。这种方法适用于不接近 0 度的航向。

问题:测试预期值为 0 度的航向的正确方法是什么? assertAlmostEquals() 只会包括略大于 0 度的角度,但会漏掉那些略小于 0 度的角度,即 360 度......

最佳答案

可以利用单位圆上两点的平方欧氏距离和余弦定律求出两角的绝对差值:

from math import sin, cos, acos
from unittest import assertAlmostEqual

def assertAlmostEqualAngles(x, y, **kwargs):
c2 = (sin(x)-sin(y))**2 + (cos(x)-cos(y))**2
angle_diff = acos((2.0 - c2)/2.0) # a = b = 1
assertAlmostEqual(angle_diff, 0.0, **kwargs)

这适用于弧度。如果角度以度为单位,则必须进行转换:

from math import sin, cos, acos, radians, degrees
from unittest import assertAlmostEqual

def assertAlmostEqualAngles(x, y, **kwargs):
x,y = radians(x),radians(y)
c2 = (sin(x)-sin(y))**2 + (cos(x)-cos(y))**2
angle_diff = degrees(acos((2.0 - c2)/2.0))
assertAlmostEqual(angle_diff, 0.0, **kwargs)

关于Python 单元测试 : Test whether two angles are almost equal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27255080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com