Я пытаюсь преобразовать большое целое число в 32-битное число с плавающей запятой одинарной точности, но я не могу решить эту проблему, с которой столкнулся. Что, если двоичное представление большого целого числа больше, чем 23-битная мантисса.
Например, возьмем целое число 1 671 277 287.
Его двоичное представление: 01100011100111011010101011100111.
Насколько я понимаю, вы перемещаете десятичный разряд влево до тех пор, пока слева от него не останется только 1 бит, например:
01.100011100111011010101011100111
Моя проблема в том, что эта мантисса составляет 30 бит, а одинарная точность с плавающей запятой имеет место только для 23 бит мантиссы. Я пытался искать эту конкретную проблему, но ничего не нашел. Как бы я справился с этим?
РЕДАКТИРОВАТЬ: Узнал некоторую информацию на случай, если у кого-то еще возникнет эта проблема. Округление по умолчанию для одинарной точности с плавающей запятой — «округление до ближайшего, привязка к четному». В другом сообщении StackOverflow рассказывается, как это легко сделать.