2012-02-01 3 views
2

Вот код:Python ошибок домена математике при использовании Pow

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

Входные значения t диапазоне от 0 до 1 (например, 0,04). Этот код генерирует «исключение в области математики», но я не уверен, почему.

Как я могу это решить?

+0

Какая версия Python это? Я попробовал 'pow (-. 6, 1.79)' в Python 3.2 и получил сложный результат. –

+0

Это 2.6 .......... –

ответ

4

t Если диапазоны от 0 до 1, то t - 1 находится в диапазоне от -1 до 0. Отрицательных чисел не могут быть увеличены до дробной степени, ни pow встроены ни math.pow.

+0

pow и math.pow - это то же самое нет? –

+1

@Joan: Нет. 'Pow()' поддерживает 3 аргумента, для модуля, тогда как 'math.pow()' does not. –

+0

почти .. встроенный 'pow' может принять третий аргумент для модуля – wim

3

Отрицательные числа, поднятые до дробного показателя, не приводят к действительным числам. Вам нужно будет использовать cmath, если вы настаиваете на их вычислении и использовании, но обратите внимание, что для использования результата вам потребуется некоторое количество сложных чисел.

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

Python использует * j * вместо * i *? Ересь! –

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.