2012-02-01 53 views
2

当这里的Python数学域误差的代码:的t范围从0到1(例如0.04)POW使用

exp = 1.79 
def calc(t): 
    return pow(t - 1, exp) 

的输入值。这段代码抛出了一个“数学领域异常”,但我不知道为什么。

我该如何解决这个问题?

+0

这是什么版本的Python?我在Python 3.2中尝试了'pow( - 。6,1.79)'并且得到了一个复杂的结果。 – 2012-02-01 03:13:36

+0

这是2.6 .......... – 2012-02-01 03:14:03

回答

4

如果t范围从0到1,然后t - 1范围从-1到0负数不能被提高到一个分数功率,既不pow内置也不math.pow

+0

pow和math.pow是一样的吗? – 2012-02-01 03:13:44

+1

@Joan:号'pow()'支持3个参数,模数,而'math.pow()'不支持。 – 2012-02-01 03:14:42

+0

几乎..内建'pow'可以接受模数 – wim 2012-02-01 03:15:29

3

将负数提升到分数指数不会导致实数。如果你坚持计算和使用它们,你将不得不使用cmath,但请注意,为了利用结果,你需要一些复数的经验。

>>> cmath.exp(cmath.log(0.04 - 1) * 1.79) 
(0.7344763337664206-0.5697182434534497j) 
+0

Python使用* j *而不是* i *?异端! – 2012-02-01 06:18:29

0
exp = 1.79 
def calc(t): 
    return pow(t - 1, exp) 

print calc(1.00) # t-1 is 0, there will be no error. 
print calc(0.99) # t-1 is negative, will raise an error.