Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python中的循环计算无穷级数_Python - Fatal编程技术网

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

用python中的循环计算无穷级数,python,Python,我希望为计算以下无穷级数的函数编写代码: 汇聚到sinx。我编写了获取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))

我希望为计算以下无穷级数的函数编写代码:

汇聚到sinx。我编写了获取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

为什么输出的行为如此?在用较大的数字进行计算时是否省略了位?

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


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

当x==40,i==17时

(((-1)**i)*(x**(2*i+1)))/math.factorial(2*i+1)==-1.1425285155674632e+16 
(((-1)**i)*(x**(2*i+1)))/math.factorial(2*i+1)==-4710083405001725.0
当x==39,i==17时

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

因此,当x>39时,计算中的数字太大,浮点数失去了足够的精度,无法用于后续步骤。

明白了。你有什么建议?