为什么在使用python和numpy时sin(180)不是零?
有人知道为什么下面的不等于0吗?
import numpy as npnp.sin(np.radians(180))
or:
np.sin(np.pi)
当我把它输入python时,它给出了1.22e-16。
回答:
数字“π”不能精确表示为浮点数。所以,
np.弧度(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`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html):
np.allclose(x, y, rel_bounds, abs_bounds)
(这实际上检查“abs(y-x)<abs\uBounds+rel\u bounds*y)”,但这是
几乎总是足够的,而且您可以在
没有。)
在您的情况下:
np.allclose(0, np.sin(np.radians(180)), rel_bounds, abs_bounds)
那么,你怎么知道正确的界限是什么呢?没办法教你
在SO答案中进行足够的错误分析。[传播
不确定性在
维基百科提供了一个高层次的概述。如果你真的没有线索,你可以用
默认值为“1e-5”相对值和“1e-8”绝对值。
以上是 为什么在使用python和numpy时sin(180)不是零? 的全部内容, 来源链接: utcz.com/qa/400216.html