IEEE-754, который является стандартной общепринятой реализацией чисел с плавающей запятой, требует, чтобы операции с плавающей запятой давали результат, который является ближайшим представимым значением к бесконечно точному результату. Таким образом, единственная неточность, с которой вы столкнетесь, — это округление после каждой выполняемой вами операции, а также распространение ошибок округления от операций, выполненных ранее в цепочке. Поплавки сами по себе не являются неточными. И, кстати, эпсилон можно и нужно вычислять, вы можете обратиться к любой книге по числовым вычислениям.
Числа с плавающей запятой могут представлять целые числа точно до длины их мантиссы. Так, например, если вы выполняете преобразование из int в double, оно всегда будет точным, но для преобразования в число с плавающей запятой оно больше не будет точным для очень больших целых чисел.
Существует один важный пример широкого использования чисел с плавающей запятой в качестве замены целых чисел — это язык сценариев LUA, который не имеет встроенного целочисленного типа, а числа с плавающей запятой широко используются для логики, управления потоком и т. д. Производительность а штраф за хранение из-за использования чисел с плавающей запятой оказывается меньше, чем штраф за разрешение нескольких типов во время выполнения, и делает реализацию легче. LUA широко используется не только на ПК, но и на игровых приставках.
Теперь многие компиляторы имеют необязательный переключатель, отключающий совместимость с IEEE-754. Затем идут компромиссы. Денормализованные числа (очень-очень маленькие числа, где показатель степени достигает наименьшего возможного значения) часто обрабатываются как нуль, и могут быть сделаны аппроксимации в реализации степени, логарифма, sqrt и 1/(x^2), но сложение/вычитание, сравнение и умножение должны сохранять свои свойства для чисел, которые могут быть точно представлены.
person
3yE
schedule
23.03.2012
a==b && b==c
подразумеваетa==c
), вы не можете использовать эпсилон. Кстати,double x = 1
уже означаетdouble x = static_cast<double>(1)
- person MSalters   schedule 23.03.2012