2

我有一个简单的问题,用于计算 python 中辐射的 sin 和 cos。

在我看来, sin 仅限于大于“x.xe-8”的值,而 cos 能够计算更小的值,例如我的示例中的“x.xe-90”。

有没有办法(除了在罪恶之前轮回)让罪恶正常工作(当然在其精度范围内)。

>>> import math
>>> math.sin(1.0e-8)
1e-08
>>> math.sin(1.0e-9)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> math.cos(1.0e-90)
1.0

编辑:问题是操作系统。有可用的更新。(https://www.suse.com/support/update/announcement/2012/suse-ru-20120681-1.html

4

3 回答 3

2

问题是操作系统。有可用的 Suse Enterprise 11.2 更新。--> https://www.suse.com/support/update/announcement/2012/suse-ru-20120681-1.html

于 2013-09-12T13:12:30.477 回答
0

我看了一下代码(Python 2.7.5)。您可以在以下位置找到相关行Modules/mathmodule.c

r = (*func)(x);
PyFPE_END_PROTECT(r);
if (Py_IS_NAN(r)) {
    if (!Py_IS_NAN(x))
        errno = EDOM;
    else
        errno = 0;
}
else if (Py_IS_INFINITY(r)) {
    if (Py_IS_FINITE(x))
        errno = can_overflow ? ERANGE : EDOM;
    else
        errno = 0;
}

func是指向系统sin函数的指针,并且can_overflow为 0。因此 ,对于给定的输入,您的系统sin要么返回要么无穷大。NaN

于 2013-09-09T19:43:50.833 回答
0

但是sin(x) ~ x围绕原点,您为什么对此如此担心?减法x**3/6.0必须使您足够接近大多数计算(如果不是,则必须添加 x**5/120.0)。

于 2013-09-09T08:57:58.317 回答