Найти - Пользователи
Полная версия: как бороться с 9999999999637
Начало » Python для новичков » как бороться с 9999999999637
1
7kozlov
Приветствую.
Вопрос общего плана.
абсолютный чайник, прошел 3 урока.
Решал разные задачки, столкнулся с тем, что питон не всегда считает до нормальных целых знаков.
Вот должно получаться ровно 2.5 а у него получается 2.499999999999637 какие-нибудь.
Почему так? откуда он это берет? и как этого избегать без особо сложных конструкций?
Потому что иногда эти “блохи” не только чреваты ошибками в принципе, но и считаются ошибкой в некоторых задачах.
Можно, казалось бы заранее указывать кол-во знаков, но не всегда можно заранее угадать, с какого знака он начнет лепить эти 9999
Спасибо.

ЗЫ Не думаю, что необходимы примеры - не верю, что никто не сталкивался. Но если надо, пришлю, когда снова столкнусь.
Areostar
round(14.22222223, 2)

>> 14.22
7kozlov
Areostar
round(14.22222223, 2)

спасибо. Но не всегда заранее понятно, что именно после второго знака начнется ерунда.
Хотелось бы универсальный способ. Хотя бы для результатов, которые вполне и АБСОЛЮТНО точно выражаются конечным числом в десятичной системе с вменяемо небольшим кол-вом знаков после запятой. Не обязательно 2,5 пусть 3,75 или 1,125
FishHook
7kozlov
Хотелось бы универсальный способ.
7kozlov
абсолютный чайник, прошел 3 урока.
продолжайте свои уроки, вам расскажут про типы
doza_and
7kozlov
Почему так? откуда он это берет?
Он это берет у процессора, который именно так и считает. Плавающая арифметика приближенная.
такой результат будет в любом языке программирования при использовании чисел в стандарте IEEE 754
https://en.wikipedia.org/wiki/Double-precision_floating-point_format#:~:text=In%20the%20IEEE%20754%2D2008,recently%2C%20base%2D10%20representations.


7kozlov
но и считаются ошибкой в некоторых задачах.
Авторы таких задач безграмотны, на них не надо обращать внимание.
7kozlov
и как этого избегать
Никак. При выводе вы можете округлить числа (например форматы f, g, e ). Но внутри расчет ведется именно с такими числами.
7kozlov
Большое спасибо за ответы. Кое-что понял.
Для меня, как чайника, стало открытием, что процессоры оперируют такими “кривыми” числами даже в тех случаях, когда есть “прямые” - то есть ровные и почти “целые”. Это значит заранее допускать дополнительные погрешности (и их возможное накопление) даже тогда, когда можно (казалось бы чайнику) обойтись без них. Вот очень мне это странно и математически противоестественно даже ))

Еще раз спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB