Python:以高达100万位的精度计算正弦/余弦
问题很明显。我见过几个pi的例子,但不是用于三角函数。也许可以使用泰勒级数as done here,但我不完全确定如何在Python中实现它。特别是如何存储这么多数字。 我应该提到:这个理想情况下会运行在香草python上,也就是没有numpy等。Python:以高达100万位的精度计算正弦/余弦
谢谢!
编辑:为说,我知道这个问题已经被问过,但它是在Java中,我一直在寻找一个Python实现:)
编辑2:哇,我不知道这里的人可以如此自已吸收。我确实尝试了几种方法,但没有一种可行。我认为这是一个你可以寻求建议的地方,你猜我错了
最后编辑:对于任何人可能会觉得这有用:许多角度可以计算为sqrt(2),sqrt(3)和Phi (1.61803 ...)因为这些数字被广泛使用具有精确到10mio数字,它是有用的,让他们在一个文件中,并在你的程序读取它们直接
mpmath是这样的:
from mpmath import mp
precision = 1000000
mp.dps = precision
mp.cos(0.1)
如果无法安装mpmath或任何其他模块的建议你可以尝试多项式逼近。
其中Rn中是Lagrange余
注意Rn中为X移动远离中心X 0尽快长得快 ,尝试计算的sin(x)时要小心使用麦克劳林级数(泰勒级数在0居中)或COS(x)的任意的X。
import math
x = .5
def sin(x):
sum = 0
for a in range(0,50): #this number (50) to be changed for more accurate results
sum+=(math.pow(-1,a))/(math.factorial(2*a+1))*(math.pow(x,2*a+1))
return sum
ans = sin(x)
print(str.format('{0:.15f}', ans)) #change the 15 for more decimal places
这里是实现泰勒级数的例子如上所示使用python。在此之后转换为cos并不会太难。
编辑:
添加在最后一行的格式,以实际打印出更多的小数位。
OverflowError:long int太大而无法在范围为0到500的范围内尝试代码时转换为float :( –
试试这个
import math
from decimal import *
def sin_taylor(x, decimals):
p = 0
getcontext().prec = decimals
for n in range(decimals):
p += Decimal(((-1)**n)*(x**(2*n+1)))/(Decimal(math.factorial(2*n+1)))
return p
def cos_taylor(x, decimals):
p = 0
getcontext().prec = decimals
for n in range(decimals):
p += Decimal(((-1)**n)*(x**(2*n)))/(Decimal(math.factorial(2*n)))
return p
if __name__ == "__main__":
ang = 0.1
decimals = 1000000
print 'sin:', sin_taylor(ang, decimals)
print 'cos:', cos_taylor(ang, decimals)
你应该检查'decimal'模块。 –
[精确计算正弦和余弦函数]可能的副本(https://stackoverflow.com/questions/19797951/calculate-sine-and-cosine-functions-with-precision) –
您是否可以展示*任何*努力实施你链接到的算法? –