Я изо всех сил пытаюсь преобразовать 32-битную с плавающей точкой в 16-битную с плавающей точкой с C.
Я понимаю концепцию нормализации, денормализации и т. Д.
Но я не смог понять нижеприведенный результат.
Это преобразование соответствует стандарту IEEE 754. (с использованием режима округления до четного)
32bit floating point
00110011 01000000 00000000 00000000
converted 16bit floating point
00000000 00000001
Это шаг, который я предпринял.
Учитывая, что 32-разрядный бит знака с плавающей запятой равен 0, поле exp равно 102, остаток равенполе битов дроби.
Таким образом, в поле exp 102 должно быть смещение -127, поэтому оно становится равным -25, и оно выглядит следующим образом.
// since exp field is not zero, there will be leading 1.
1.1000000 00000000 00000000 * 2^(-25)
При преобразовании указанного числа в плавающее с половиной точноститочка, мы должны добавить смещение (15) к показателю степени для кодирования поля exp.
поэтому поле exp равно -10.
Так как поле expified меньше 0, учитывая 32-битную плавающую точкуне может быть успешно выражен с плавающей точкой половинной точности.
Так что я думал, что битовая комбинация с плавающей точкой половинной точности будет выглядеть как
00000000 00000000
Но почему 00000000 00000001
?
Я прочитал много статей, которые были загружены на stackoverflow, но это всего лишь примеры кода, на самом деле не связанные с внутренним поведением.
Может кто-то, пожалуйста, противоречит моему заблуждению?