Некоторые люди говорят, что машинный эпсилон для чисел с плавающей запятой с двойной точностью составляет 2^-53, а другой (чаще) говорят о его 2^-52. Я столкнулся с оценкой точности машины, используя целые числа, кроме 1 и aproaching сверху и снизу (в Matlab), и получил в качестве результата оба значения. Почему на практике можно наблюдать обе ценности? Я думал, что он должен всегда создавать эпсилон около 2^-52.Оценка точности машины
ответ
Существует внутренняя неопределенность в отношении термина «машинный эпсилон», поэтому, чтобы исправить это, обычно определяется разница между 1
и следующим большим представимым числом. (Это число фактически (и не случайно), полученное буквально увеличивая двоичное представление на единицу.)
64-битный поплавок IEEE754 имеет 52 явных бита мантиссы, поэтому 53 включает неявное начало 1
. Таким образом, два последовательных числа:
1.0000 ..... 0000
1.0000 ..... 0001
\-- 52 digits --/
Так влияет тип двух является 2 -52.
Это зависит от того, каким образом вы будете кругом.
1 + 2^-53
находится на полпути между 1
и 1 + 2^-52
, которые являются последовательными в плавающей запятой с двойной точностью. Поэтому, если вы его округлите, это отличается от 1; если вы округлите его, оно равно 1.
Там фактически два определения «машинной точности», которые звучат совершенно идентичны на первый взгляд, но не являются, так как они дают разные значения для «машины эпсилон»:
- Машина эпсилон является наименьший номер с плавающей запятой
eps1
такой, что1.0 + x > 1.0
. - Машина epsilon - это разность
eps2 = x - 1.0
гдеx
- наименьшее представимое число с плавающей запятой сx > 1.0
.
Строго говоря математически, эти определения эквивалентны, то есть eps1 == eps2
, но мы не говорим о реальных чисел здесь, но о числах с плавающей точкой. И это означает неявное округление и аннулирование, что означает, что приблизительно, eps2 == 2 * eps2
(по крайней мере, в наиболее распространенных архитектурах с использованием поплавков IEEE-754).
Более подробно, если мы упустим некоторые x
идут от 0.0
в какой-то момент, когда 1.0 + x > 1.0
, эта точка достигается при x == eps1
(по определению 1). Однако из-за округления результат 1.0 + eps1
равен не1.0 + eps1
, но следующее представляемое значение с плавающей запятой больше чем 1.0 - то есть eps2
(по определению 2). Так, в сущности,
eps2 == (1.0 + eps1) - 1.0
(Математика будет пресмыкаться на это.) И из-за округление поведения, это означает, что
eps2 == eps1 * 2 (approximatively)
И поэтому есть два определения для «машины эпсилона» , как законные, так и правильные.
Лично я нахожу eps2
более «прочное» определение, так как оно не зависит от фактического поведения округления, только от представления, но я бы не сказал, что он более правильный, чем другой. Как всегда, все зависит от контекста. Просто проясните, какое определение вы используете, говоря о «машинный эпсилон», чтобы предотвратить путаницу и ошибки.
Не знаете, почему математики будут съеживаться на «этом». Математик понимает, что числа с плавающей запятой отличаются от реальных чисел, и в частности, что добавление значений с плавающей запятой не является ассоциативным. –
Это не должно было быть принято на 110% серьезным, Стивен! Я прекрасно понимаю, что математики не тупые. Но даже я сам, как не математик, считаю эти формулы довольно неудобными. Я имею в виду, '1 + x - 1 == x * 2'? Nah ... –
Не волнуйтесь, мне просто нужно было много раз объяснять с плавающей точкой инженеров-градиентов (как математиков). –
- 1. Оценка точности стрельбы
- 2. Оценка точности регистрации изображения
- 3. Оценка точности прогноза модели NB
- 4. Понимание точности машины на основе битового представления
- 5. Вычислить точность машины на произвольной точности gmp
- 6. Какой оценка точности для использования Среднего снижения точности при scikit RandomForestClassifier
- 7. API-интерфейс отчетов Google Admin: статистика использования пользователей Оценка точности
- 8. оценка SymPy функции в произвольной точности с плавающей точкой
- 9. точность машины и максимальное и минимальное значение типа двойной точности
- 10. Внедрение алгоритма симплексов и получение ошибки «матрица сингулярной точности машины»
- 11. Python vs MATLAB - Обработка чисел, приближающихся к точности машины
- 12. Оценка производительности поисковой машины с номером в MySQL?
- 13. Оценка оборудования для hadoop
- 14. Оценка классификатора многоуровневого класса
- 15. Оценка квадратного корня
- 16. Методика измерения точности измерения точности символов OCR
- 17. Потеря точности точности Java с формулой Герона
- 18. Путаница о критической точности и средней точности
- 19. расчета точности и точности для мультиклассируют системы
- 20. Расчет точности, повторения, точности с использованием SVM
- 21. Кривая обучения с оценкой точности. Переобучения?
- 22. Оценка:
- 23. Оценка воздействия в Excel
- 24. Потеря точности?
- 25. Точности NSTimer
- 26. Улучшение точности классификатора статьи
- 27. Методы повышения точности классификатора SVM
- 28. Оценка/оценка места в Foursquare
- 29. Оценка Tensorflow: Оценка всех изображений
- 30. Оценка влево и вправо Оценка:
Так это ошибка округления, которая позволяет получить результат, иногда отображаемый как 2^-53, а иногда как 2^-52? потому что эта часть меня действительно смутила. – user381261
Математически, как указывает Керрек, '1' и' 1 + 2^-52' определенно имеют последовательные представления с двойной точностью. Округление - единственное объяснение, которое я могу себе представить, почему ваши эксперименты показывают что-то еще. Вы пытались добавить '1' и (например)' 1.5 * 2^-53'? – Nemo