san*_*lto 5 python math floating-point trigonometry decimal
我有一点问题,看看:
>>> import math
>>> math.sin(math.pi)
1.2246467991473532e-16
Run Code Online (Sandbox Code Playgroud)
这不是我在微积分课上学到的东西(实际上是0)
所以,现在,我的问题:
我需要用Python执行一些重三角计算.我可以用什么库来获取正确的值?
我可以使用十进制吗?
编辑:
对不起,我的意思是其他的事情.
我想要的是一些方法:
>>> awesome_lib.sin(180)
0
Run Code Online (Sandbox Code Playgroud)
或这个:
>>> awesome_lib.sin(Decimal("180"))
0
Run Code Online (Sandbox Code Playgroud)
我需要一个执行良好三角学演算的图书馆.每个人都知道180°的罪是0,我需要一个能够做到这一点的库.
kin*_*all 15
1.2246467991473532e-16接近0 - 小数点和第一个有效数字之间有16个零 - 很多3.1415926535897931(值math.pi)接近pi.答案是正确的十六位小数!
因此,如果您想要sin(pi)等于0,只需将其舍入到合理的小数位数即可.15对我来说看起来不错,应该适用于任何应用程序:
print round(math.sin(math.pi), 15)
Run Code Online (Sandbox Code Playgroud)
vit*_*aut 11
Pi是一个无理数,因此无法使用有限数量的位精确表示.但是,您可以使用某些库进行符号计算,例如sympy.
>>> sympy.sin(sympy.pi)
0
Run Code Online (Sandbox Code Playgroud)
关于你问题的第二部分,如果你想使用度而不是弧度,你可以定义一个简单的转换函数
def radians(x):
return x * sympy.pi / 180
Run Code Online (Sandbox Code Playgroud)
并按如下方式使用:
>>> sympy.sin(radians(180))
0
Run Code Online (Sandbox Code Playgroud)