Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странный результат при сложению float 
V
    Опции темы
fearuth
Дата 18.2.2009, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Привет всем! У меня такой вопрос:

есть 3 чисал:
a=14.96
b=1.76
c=13.2

Люди с адекватной логикой могут подтвердить, что (b+c)==a, но в python оказывается, что они не равны!!! В чем прикол?

Если выполнить str(b+c)==str(a), главное сравнивает правильно! Подскажите в чем проблема и как ее решить?
PM MAIL   Вверх
pythonwin
Дата 18.2.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(fearuth @  18.2.2009,  10:59 Найти цитируемый пост)
Подскажите в чем проблема

насколько помню в паскале не рекомендуется применять операцию равно к числам с плавающей точкой - в питоне аналогично

Добавлено через 3 минуты и 51 секунду
Цитата

>>> int((b+c)*100)==int(a*100)
True


Это сообщение отредактировал(а) pythonwin - 18.2.2009, 11:52
PM WWW GTalk Jabber   Вверх
fearuth
Дата 19.2.2009, 04:53 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Я в шоке... А ведь этот язык я считал удобным...
PM MAIL   Вверх
Fenrir13
Дата 19.2.2009, 09:17 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 20.9.2008

Репутация: 1
Всего: 2



Числа с плавающей точкой нужно проверять на равенство с округлением до удовлетворяющей точности. Сама природа плавающей точки неточна, всегда есть какая-то ошибка. Поэтому её необходимо исключать округлением. При выводе str(myFloatNumber) также происходит округление.
PM MAIL Jabber   Вверх
alex_smirnov
Дата 19.2.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 22.6.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 4



Уважаемый fearuth, везде так и никак по-другому.
Советую ознакомиться с базовыми теоретическими понятиями по-русски и по-английски прежде чем обвинять язык в неудобности.

Это сообщение отредактировал(а) pythonwin - 19.2.2009, 14:43
PM GTalk Jabber   Вверх
fearuth
Дата 20.2.2009, 06:40 (ссылка) |   (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Извеняюсь товарисчи. Был не прав. Просто ни когда не сталкивался до этого с данной операцией.
Хочу заметить однако, что  в С++:
float a=14.96, 1.76, 13.2, d=0;
if(a==(b+c)) выдает false

Если сделать перед операцией if : d=b+c

if(a==d) выдает true,

В python это не прокатывает... =(
PM MAIL   Вверх
jython
Дата 28.3.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



Цитата(fearuth @  18.2.2009,  07:59 Найти цитируемый пост)
Привет всем! У меня такой вопрос:

есть 3 чисал:
a=14.96
b=1.76
c=13.2

Люди с адекватной логикой могут подтвердить, что (b+c)==a, но в python оказывается, что они не равны!!! В чем прикол?

Если выполнить str(b+c)==str(a), главное сравнивает правильно! Подскажите в чем проблема и как ее решить? 


>>> a=14.96
>>> b=1.76
>>> c=13.2
>>> int(c+b)==int(a)
True

PM MAIL WWW Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0735 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.