Описание тега floating-point
Многие вопросы, которые здесь задаются о математике с плавающей запятой, касаются небольших неточностей в арифметике с плавающей запятой. Чтобы использовать пример из отрывка,0.1 + 0.1 + 0.1
может привести к 0.300000001
вместо ожидаемого 0.3
. Подобные ошибки вызваны тем, как числа с плавающей запятой представлены в памяти компьютера.
Целые числа хранятся как точные значения чисел, которые они представляют. Числа с плавающей запятой хранятся как два значения: мантисса и показатель степени. Невозможно найти пару значащая-экспонента, которая соответствует всем возможным действительным числам. В результате неизбежны некоторые приближения и, следовательно, неточности.
Два часто цитируемых ресурса вводного уровня по математике с плавающей запятой - это " Что должен знать каждый компьютерный ученый об арифметике с плавающей запятой" и " https://floating-point-gui.de/.
FAQs:
Почему 0.1 не существует с плавающей запятой
https://0.30000000000000004.com/
Связанные теги:
- ieee-754 (наиболее часто используемый стандарт для вычислений с плавающей запятой)
- с плавающей запятой половинной точности (16b с плавающей запятой)
- одинарная точность (32b с плавающей запятой)
- с двойной точностью (64b с плавающей запятой)
- расширенная точность (обычно 80b с плавающей точкой)
- четверной точности (128b с плавающей запятой)
- типы в c и C++
- аспекты чисел с плавающей запятой и вычислений
Языки программирования, где все числа имеют двойную точность (64b) с плавающей точкой:
- javascript (см.
Number.MAX_SAFE_INTEGER
на MDN и Какое наибольшее целочисленное значение в JavaScript, к которому может перейти Number без потери точности?) - awk (см. Выражения в awk в POSIX)
- lua (только до 5.2, в 5.3 были введены целые числа; см. Изменения в языке в руководстве Lua 5.3)