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

有人知道为什么下面的不等于0吗?

import numpy as np

np.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

回到顶部