Какое наибольшее денормализованное и нормализованное число?(64бит, ИЭЭ 754-1985)
Я борюсь с арифметикой с плавающей запятой, потому что я действительно хочу понять эту тему!
Я знаю, что числа могут быть представлены в научной нотации.Таким образом, для обоих чисел экспонента должна выглядеть следующим образом:
Денормализованное Число: 11....11 Итак (1+1/2 + 1/2^2 + ... + 1/2^52)*2^1023
Нормализованное Число: 11....11 Итак (1+1/2 + 1/2^2 + ... + 1/2^52)*2^1024
Однако я не уверен, что это правильно?
I действительно был бы признателен за ваш ответ!
ПС.: В Википедии дано число !Однако я не знаю, как они до этого додумались...
1 ответ:
Как вы знаете, формат двойной точности выглядит следующим образом:
Ключ к пониманию денормализованных чисел заключается в том, что они на самом деле не являются числами с плавающей запятой, а вместо этого используют микроформат с фиксированной точкой, используя представления, которые не используются в "нормальном" формате.нормальные числа с плавающей запятой имеют вид:
Все единицы в экспоненциальном поле означают, что у нас есть либо бесконечность, либо NaN (не-число).m*2^e
, гдеe
находится путем вычитания смещения из поля экспоненты выше, иm
- число между 1 и 2, где биты после "двоичной" точки задаются дробью выше. Число 1 перед двоичной точкой не сохраняется, поскольку известно, что оно всегда равно 1. Поле экспоненты имеет значение от 1 до 2046. Значения 0 (все нули) и 2047 (все единицы) зарезервированы для специального использования.Все нули означают, что мы имеем дело сденормальными числами с плавающей запятой. Эти все еще из та же форма,
m*2^e
, но значенияm
иe
выводятся по-разному.m
теперь число между 0 и 1, поэтому перед двоичной точкой вместо 1 для нормальных чисел есть 0.e
всегда имеет одно и то же значение: -1022. Таким образом, показатель степени является константой, поэтому я ранее назвал его форматом с фиксированной точкой.Таким образом, наибольшие возможные значения для каждого из них:
- нормальный: (1+1/2 + 1/2^2 + ... + 1/2^52)*2^1023 = (2-2^-52)*2^1023 = 1.797...e+308
- Донормила: (0+1/2 + 1/2^2 + ... + 1/2^52)*2^-1022 = (1-2^-52)*2^-1022 = 2.225...e-308