2014-02-13 3 views
2

У меня есть следующая программа:Python: Почему мой «менее чем» тест терпит неудачу?

def eigen(a, b, c, d, e, f): 
    epsilon = 1E-9 
    a = abs(float(a*e+b*f)/float(c*e+d*f) - float(e)/float(f)) 
    print a, epsilon 
    print a < epsilon 
    print abs((a*e+b*f)/float(c*e+d*f) - e/float(f)) < epsilon 

распечаток:

0.0 1e-09 
True 
False 

когда значения a,b,c,...,f = 3, 1, 1, 3, 4, -4

Я ожидал, что последние две строки в печатном True, как я думал, что они были equivelent заявления , Вы любезно объясните мне, что происходит?

Спасибо за ваше время.

С наилучшими пожеланиями,

Marius

+0

Если вы хотел, чтобы они были эквивалентны, почему вы записали одно с помощью дополнительного 'float (...)' преобразования с, но не с другим? (Это не вызывает вашей проблемы здесь, но, тем не менее, это признак того, что вы не очень осторожны ...) – abarnert

ответ

10

Проблема заключается в том, что

a = abs(float(a*e+b*f)/float(c*e+d*f) - float(e)/float(f)) 

назначает другое значение a, который путает расчет, который следует:

print abs((a*e+b*f)/float(c*e+d*f) - e/float(f)) < epsilon 
#  ^This is no longer the original a 
+0

ха-ха. Хорошо поймал. сначала не видел – Claudiu

+0

@Claudiu: Да, я немного взглянул на код, чтобы заметить его. :) – NPE

Смежные вопросы