Уведомления

Группа в Telegram: @pythonsu

#1 Март 11, 2011 21:28:05

Иван
От:
Зарегистрирован: 2011-03-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Умножение дробных чисел

Почему питон считает не правильно?
например
31.400000000000002 = 3.14 * 10

нашел что то невнятное о сложности выражения данных. ну это же бред



Офлайн

#2 Март 11, 2011 21:45:42

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Умножение дробных чисел

Питон считает все абсолютно правильно :)
http://asvetlov.blogspot.com/2011/02/blog-post.html



Офлайн

#3 Март 12, 2011 15:22:46

Иван
От:
Зарегистрирован: 2011-03-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Умножение дробных чисел

Странно что еще никаких костылей не поставили. Потому что питон считает как раз не правильно. Пост кстати прочитал, почему так происходит, понял



Офлайн

#4 Март 12, 2011 15:47:08

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Умножение дробных чисел

Позвольте не согласиться.
Считается - правильно. Причем считается одинаково на всех языках программирования, Питон - не исключение.
Ошибка получается при вводе-выводе из-за округления. Числа-то двоичные.
Как я написал, ее постарались убрать - но полностью ликвидировать невозможно.



Офлайн

#5 Март 12, 2011 16:52:00

Иван
От:
Зарегистрирован: 2011-03-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Умножение дробных чисел

Я потому и говорю о костылях.
Всё таки

>>> x = 3.14 * 10
>>> x > 31.4
True
Не есть гуд



Офлайн

#6 Март 12, 2011 16:56:57

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Умножение дробных чисел

C'est la vie

Офлайн

#7 Март 12, 2011 16:58:41

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Умножение дробных чисел

Вас не удивляет, что
0.33 * 10 < (1/3)*10, где (1/3) - натуральная дробь?
Проблема ведь та же - некоторые числа выглядят как бесконечные дроби при фиксированном основании.



Офлайн

#8 Март 13, 2011 16:03:10

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Умножение дробных чисел

Иван
Используйте float по назначению - в научных вычислениях, для обработки оцифрованных значений, поступающих от аналоговых приборов и т.п.

А для операций с фиксированным кол-вом знаков после запятой есть decimal.



Офлайн

#9 Март 14, 2011 13:08:47

Иван
От:
Зарегистрирован: 2011-03-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Умножение дробных чисел

Подскажите, как использовать правильно? А то я кроме как
x=3.14*10
y=31.4
print str(x)==str(y)
true

не могу получить true =\



Офлайн

#10 Март 14, 2011 15:49:28

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Умножение дробных чисел

Прочитайте вот это: http://docs.python.org/tutorial/floatingpoint.html

Ответ на последний вопрос — используйте округление.

>>> round(y, 2) == round(x, 2)
True

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version