Здесь вы можете видеть, что следующее большее число получается путем увеличения двоичного содержимого. Но я не думаю, что это будет работать, поскольку двойная схема выглядит так:
[изображение опущено]
Я думаю, что нужно сделать что-то еще, чтобы сделать наименьшее увеличение, когда все биты дроби установлены в единицу.
В первом приближении, да, это работает .
Рассмотрим нормализованное положительное число: это значение m * 2 e , где 1 <= <em>m <2, т.е. <em>m = 1.xxxxxxx
(в двоичном виде). «1
» перед двоичной точкой опускается в сохраненном значении, поэтому часть «дроби» (или «мантиссы» или «значимого») хранимого значения состоит из битов после двоичной точки.
Давайте представим, что в дробной части только 4 бита, а не 52: сохраненное значение 1111
(двоичное) представляет в дробной части m = 1.1111
(двоичное). Обрабатывая это как целое число и увеличивая его, вы получите дробную часть 0000
с переносом.
Но перенос входит в показатель степени, который увеличивает его. Совершенно верно: после 1.1111
* 2 e следующее число, которое мы ожидаем, будет 10.0000
, что действительно 1.0000
* 2 e + 1 !
Я сказал «в первом приближении» ... преобразование представления в целое число, приращение и обратное преобразование в двойное отлично работает для положительных нормализованных чисел. Это также работает для положительных денормализованных чисел (меньше наименьшего нормализованного числа; они имеют показатель степени 0, а бит, который обычно скрыт, является явным).
Это работает для отрицательных чисел, если ваше целочисленное представление также является величиной знака; чего обычно не будет. Для более типичного дополнения к двум вы должны вычесть один, чтобы «увеличить» отрицательный двойной.
Наконец, в конечном итоге вы переполните наибольшее нормализованное число и увеличите показатель степени до бесконечности и диапазона NaN.
Есть интересная статья, которая освещает это здесь .