【问题标题】:ZeroDivisionError: 0.0 to a negative or complex powerZeroDivisionError:0.0 的负数或复数幂
【发布时间】:2013-09-24 15:37:49
【问题描述】:

我想找到一个积分 ((sin x)^8, {x,0,2*Pi}) 并尝试编写一个简单的程序,没有任何外部模块作为“数学”,它计算泰勒级数并总结间隔 (0,2*Pi) 但有错误

Traceback (most recent call last):
  File "E:\python\ShAD\sin.py", line 27, in <module>
    sum+=(ser(i*2*3.1415926/k))**8
  File "E:\python\ShAD\sin.py", line 21, in ser
    sin_part+=((-1)**(j-1))*(a**(2j-1))/(fact(2*j-1))
ZeroDivisionError: 0.0 to a negative or complex power

突然发生。而且我只是看不到某些东西被零除或具有复数的幂,所有变量都只有真正的正值。 “k”是序列数量和区间 (0,2*Pi) 除法的值。

sum=0
k=20
res=0

def fact(t):
    if t==0 or t==1:
        res=1

    else:
        res=1
        for l in range(2,t+1):
            res=res*l           
    return res

def ser(a):
    sin_part=a
    for j in range(2,k):
        print fact(2*j-1)
        sin_part+=((-1)**(j-1))*(a**(2j-1))/(fact(2*j-1))
        print 'yay'
    return sin_part


for i in range(0,k-1):
    sum+=(ser(i*2*3.1415926/k))**8
print sum

【问题讨论】:

    标签: python python-2.7 divide-by-zero


    【解决方案1】:

    而且我只是看不到某物在哪里被零除或有权力 复数,所有变量只有正数。

    不正确。在

    的第一次迭代中
    for i in range(0,k-1):
        sum+=(ser(i*2*3.1415926/k))**8
    

    你有i=0,所以ser 的参数是0,所以a == 0,你有(a**(2j-1)),它取0 的复数幂。

    也许你的意思是a**(2*j-1)? Python 使用j 作为虚数单位,因此2j-1 是一个复数。

    【讨论】:

    • 也许你的意思是a**(2*j-1)?所以,它是!非常感谢,我只是拼错了一种表达方式。修复它,一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多