用python中的循环计算无穷级数

时间:2017-11-09 14:17:44

标签: python

我希望为计算以下无限级数的函数创建代码:

enter image description here

收敛于“sin(x)”。我编写了获取x:

值的代码
import math

def zero_to_infinity():
    i = 0
    while True:
        yield i
        i += 1

def CalcMYSeries(x):
    res, temp = 0, 0
    for i in zero_to_infinity():
        res += (((-1)**i)*(x**(2*i+1)))/math.factorial(2*i+1)
        if res == temp:
            break
        temp = res
    return res

代码适用于小值(例如)10,20。但是;对于大值,它会生成错误的数字。以下是输出示例:

>> CalcMYSeries(10): -0.54402111088927
>> sin(10) =  -0.5440211108893698
>> CalcMYSeries(40): -3.282209134433358
>> sin(40) =  0.7451131604793488

为什么输出表现如此?在用更大的数字进行计算时是否省略了比特?

2 个答案:

答案 0 :(得分:1)

不是我怎么说的,但是是的。浮点数具有有限的精度,在某一点之后,您的计算开始受到二进制表示的不精确性的影响。

使用内置的Decimal模块处理需要保持精确的非常小的分数。

答案 1 :(得分:0)

当x == 40且i == 17时,

(((-1)**i)*(x**(2*i+1)))/math.factorial(2*i+1)==-1.1425285155674632e+16 

当x == 39且i == 17时,

(((-1)**i)*(x**(2*i+1)))/math.factorial(2*i+1)==-4710083405001725.0

所以,当x> 39,计算中的数字太大,浮点数对后续步骤的精度损失不足。