【发布时间】:2012-06-06 22:16:16
【问题描述】:
我有一个小问题,看看:
>>> import math
>>> math.sin(math.pi)
1.2246467991473532e-16
这不是我在微积分课上学到的(实际上是 0)
那么,现在,我的问题:
我需要用 Python 执行一些繁重的三角计算。我可以使用什么库来获取正确的值?
我可以使用十进制吗?
编辑:
对不起,我的意思是另外一回事。
我想要的是某种方法:
>>> awesome_lib.sin(180)
0
或者这个:
>>> awesome_lib.sin(Decimal("180"))
0
我需要一个能够很好地执行三角函数的库。每个人都知道 sin 180° 为 0,我也需要一个可以做到这一点的库。
【问题讨论】:
-
"我可以使用十进制吗?"不,Pi 是非理性的。
-
相关的问题是:你打算用这个库来做什么?这将决定你是否真的需要符号计算,或者是否有一些不那么重量级的方法来做你想做的事。您真的应该阅读@Zhenya 答案上的“每个计算机科学家应该了解的关于浮点运算的知识”链接。
-
其实你得到的答案是正确,因为
math.pi是最接近pi的浮点数,而不是pi本身!如果需要,您应该再次阅读有关浮点运算的链接。 -
拥有一个以度为单位返回参数的三角函数值的库对您有什么好处?尽管 sine(180º) 为零,但只有少数特殊参数的三角函数值是有理数(并且可以用浮点数表示)。几乎所有可表示浮点值的正弦值都不是可表示浮点值。因此,即使您使用度数,您也会遇到小错误,正如您观察到的(几乎)pi 的正弦值。因此,我们需要更多地了解您想要完成的工作,然后才能给您提供好的答案。
标签: python math floating-point decimal trigonometry