使用pow时Python数学域错误

时间:2012-02-01 02:56:20

标签: python exception math numerical-methods

以下是代码:

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

t的输入值范围为0到1(例如0.04)。此代码抛出“数学域异常”,但我不确定原因。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

如果t的范围是0到1,那么t - 1的范围是-1到0.负数不能提升到分数幂,既不是pow内置也不是{{1 }}。

答案 1 :(得分:3)

增加到小数指数的负数不会产生实数。如果您坚持计算和使用它们,则必须使用cmath,但请注意,您需要一些复杂数字的经验才能使用结果。

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

答案 2 :(得分: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.