该数字
π不能完全表示为浮点数。所以,
np.radians(180)不给你
π,它给你
3.1415926535897931。
而
sin(3.1415926535897931)其实类似
1.22e-16。
那么,您如何处理呢?
您必须计算出或至少猜测出适当的绝对和/或相对误差范围,然后
x == y编写而不是:
abs(y - x) < abs_bounds and abs(y-x) < rel_bounds * y
(这也意味着你要组织你的计算,使相对误差相对较大
y,而不是
x在你的情况,因为
y是恒定的
0,这是微不足道的,只是做了落后的。)
Numpy提供了一个在整个数组中为您执行此 *** 作的函数
allclose:
np.allclose(x, y, rel_bounds, abs_bounds)
(这实际上会检查
abs(y - x) < abs_ bounds + rel_bounds *y),但这几乎总是足够的,如果没有,您可以轻松地重新组织代码。)
在您的情况下:
np.allclose(0, np.sin(np.radians(180)), rel_bounds, abs_bounds)
那么,您如何知道正确的界限呢?SO答案无法教您足够的错误分析。维基百科上不确定性的传播给出了一个高层次的概述。如果您真的不知道,可以使用默认值,即
1e-5相对值和
1e-8绝对值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)