Как конвертировать поплавок в двойную работу?
double может представлять каждое значение, которое может представлять float.
Разве преобразование числа с плавающей запятой в двойное просто расширяет мантиссу, добавляя 0, и расширяет экспонентную часть, заполняя биты знака?
Я проверил некоторые данные на http://www.binaryconvert.com/index.html. Это работает таким образом. Но я не нашел никакого официального определения конверсии. Есть ли у конвертации какой-либо угловой случай, не работающий таким образом?
1 ответ
Это имеет очень мало общего с C; его единственная гарантия заключается в том, что преобразование из float
в double
должен сохранить значение.
Таким образом, вы действительно спрашиваете о (предположительно) IEEE-754. Есть по крайней мере несколько способов, которыми ваше описание не выполняется:
Экспоненты для одинарной и двойной точности имеют различные отклонения. Таким образом, преобразование требует больше, чем просто расширение знака.
Денормальные числа требуют специальной обработки (они становятся нормальными числами).
NaN также могут требовать специальной обработки - различие между сигнализацией и тихим NaN зависит от значения мантиссы.