为什么使用math.pow会导致ValueError: math domain error错误?

6

以下是代码:

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

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

我该如何解决?


这是哪个版本的Python?我在Python 3.2中尝试了pow(-.6, 1.79),结果得到了一个复数。 - Free Monica Cellio
@FreeMonicaCellio 内置的 pow 函数可以实现此功能,使用 ** 运算符(带有适当的括号)也可以,但标准库中的 math.pow 报告异常。令人困惑的是,两个 pow 都自称为 <built-in function pow>,但它们并不相同。 - Karl Knechtel
3个回答

7
如果 t 的范围是从 0 到 1,那么 t - 1 的范围就是从 -1 到 0。负数不能被 pow 内置函数或 math.pow 函数开非整数次方。

pow和math.pow是一样的吗? - Joan Venge
1
@Joan:不是的。pow()支持3个参数,用于取模,而math.pow()则不支持。 - Ignacio Vazquez-Abrams
谢谢,我不知道。但是当我使用from math import pow时,那个pow是哪个? - Joan Venge
这与使用 import math 然后 math.pow 相同,只是名称现在会遮蔽命名空间中的内置 pow。请注意,您还可以使用 x**y 进行指数运算。 - wim
谢谢Wim。我不知道可以在不使用math的情况下使用pow函数。 - Joan Venge

4

负数的分数指数幂不会得到实数。如果您坚持要计算和使用它们,您将需要使用cmath,但请注意,您需要一些复数经验才能利用结果。

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

Python使用j代替i?异端! - John Flatness

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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接