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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> точность при вычислениях с плав. точкой в питоне 
V
    Опции темы
pythonwin
Дата 1.11.2006, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Всем привет!
Помогите пожалуйста:
Код

float('-1.2')+1


в результате получаю -0.19999999999999996, хотя нужно -0.2 

Это сообщение отредактировал(а) pythonwin - 1.11.2006, 08:52
PM WWW GTalk Jabber   Вверх
albertn
Дата 1.11.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(pythonwin @  1.11.2006,  08:42 Найти цитируемый пост)
в результате получаю -0.19999999999999996, хотя нужно -0.2 
Учитывая формат представления чисел с плавающей точкой это вполне закономерно, т.к. в двуичной системе исчисления нельзя однозначно записать число -1.2 в связи  со структурой представления. можно разве что получить приближенное значение с определенной погрешностью. По-этому при выводе на экран в большенстве случаев происходит округление числа, как например делает это print
К тому-же никогда нельзя сравнивать вещественные числа при помощи оператора ==
Код

-1.2+1 == -0.2 # False
abs((-1.2+1) - (-0.2)) < 0.00000001 # True

Об этом никогда не стоит забывать
PM WWW ICQ   Вверх
diam
Дата 1.11.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(pythonwin @  1.11.2006,  11:42 Найти цитируемый пост)
в результате получаю -0.19999999999999996, хотя нужно -0.2 

Полезно округлять числа.
Код

float('%.4f' % (-1.2 + 1)) == float('%.4f' % -0.2) # True
print 'Вы ввели: %.4f' % 4.23123123123  # :)

PM MAIL   Вверх
pythonwin
Дата 1.11.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



diam, +1
albertn, +1

albertndiam, спасибо! 
проблему решил по другому. smile

PM WWW GTalk Jabber   Вверх
diam
Дата 1.11.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(pythonwin @  1.11.2006,  14:43 Найти цитируемый пост)
проблему решил по другому. smile

А для будущих поколений (или археологов) не расскажешь?
PM MAIL   Вверх
pythonwin
Дата 1.11.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(diam @  1.11.2006,  19:09 Найти цитируемый пост)
А для будущих поколений (или археологов) не расскажешь? 

http://forum.vingrad.ru/index.php?showtopi...st&p=907602
PM WWW GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




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


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

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