Python:计算sine/cosine,精度可达100万位

Python: Calculate sine/cosine with a precision of up to 1 million digits

问题不言自明。我看过几个 pi 的例子,但没有看到 trigo 函数。也许可以使用泰勒级数 as done here,但我不完全确定如何在 python 中实现它。特别是如何存储这么多数字。 我应该提到:理想情况下,这将 运行 在香草 python 上,即没有 numpy 等

谢谢!

编辑:如前所述,我知道之前有人问过这个问题,但它在 java 中,我正在寻找 python 实现:)

编辑 2:哇,我不知道这里的人可以如此专注。我确实尝试了几种方法,但 none 会起作用。我以为这是一个你可以寻求建议的地方,我猜我错了

上次编辑:对于可能觉得这有用的任何人:许多角度可以计算为 sqrt(2)、sqrt(3) 和 Phi (1.61803..) 的倍数,因为这些数字可以精确地广泛使用最多 10mio 位,将它们放在文件中并直接在程序中读取它们很有用

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就不难了。

编辑:

在最后一行的格式中添加,以便实际打印出更多的小数位。

mpmath 是这样的:

from mpmath import mp
precision = 1000000
mp.dps = precision
mp.cos(0.1)

如果无法安装 mpmath 或任何其他模块,您可以按照建议尝试多项式逼近。

其中 Rn拉格朗日余数

请注意,一旦 x 离开中心 xRn 就会快速增长0,所以在尝试计算 sin(x)[= 时要小心使用 麦克劳林级数(以 0 为中心的泰勒级数) 44=] 或 cos(x) of 任意 x.

试试这个

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)