为什么在使用python和numpy时sin(180)不为零?

为什么在使用python和numpy时sin(180)不为零?,第1张

为什么在使用python和numpy时sin(180)不为零?

该数字

π
不能完全表示为浮点数。所以,
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
绝对值。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5639686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存