Иван
Март 11, 2011 21:28:05
Почему питон считает не правильно?
например
31.400000000000002 = 3.14 * 10
нашел что то невнятное о сложности выражения данных. ну это же бред
Андрей Светлов
Март 11, 2011 21:45:42
Иван
Март 12, 2011 15:22:46
Странно что еще никаких костылей не поставили. Потому что питон считает как раз не правильно. Пост кстати прочитал, почему так происходит, понял
Андрей Светлов
Март 12, 2011 15:47:08
Позвольте не согласиться.
Считается - правильно. Причем считается одинаково на всех языках программирования, Питон - не исключение.
Ошибка получается при вводе-выводе из-за округления. Числа-то двоичные.
Как я написал, ее постарались убрать - но полностью ликвидировать невозможно.
Иван
Март 12, 2011 16:52:00
Я потому и говорю о костылях.
Всё таки
>>> x = 3.14 * 10
>>> x > 31.4
True
Не есть гуд
Ferroman
Март 12, 2011 16:56:57
C'est la vie
Андрей Светлов
Март 12, 2011 16:58:41
Вас не удивляет, что
0.33 * 10 < (1/3)*10, где (1/3) - натуральная дробь?
Проблема ведь та же - некоторые числа выглядят как бесконечные дроби при фиксированном основании.
Lexander
Март 13, 2011 16:03:10
Иван
Используйте float по назначению - в научных вычислениях, для обработки оцифрованных значений, поступающих от аналоговых приборов и т.п.
А для операций с фиксированным кол-вом знаков после запятой есть decimal.
Иван
Март 14, 2011 13:08:47
Подскажите, как использовать правильно? А то я кроме как
x=3.14*10
y=31.4
print str(x)==str(y)
true
не могу получить true =\
Ferroman
Март 14, 2011 15:49:28
Прочитайте вот это:
http://docs.python.org/tutorial/floatingpoint.htmlОтвет на последний вопрос — используйте округление.
>>> round(y, 2) == round(x, 2)
True