Есть улов!Преобразование поплавка в целое число
У меня есть IEEE 754 одноточечная (32-разрядная) поплавка, хранящаяся в двух последовательных 16-битных целых числах.
Процессор, который я использую, не имеет математики с плавающей запятой или типов данных с плавающей запятой! То, что я хочу сделать, это преобразовать значение float в 16-разрядное целое число со знаком. Процессор имеет стандартные целочисленные математические и битовые манипуляции (маскировка, перемещение и т. Д.).
Я за исключением того, что мне нужно будет потерять некоторую точность при переходе от 32-битного поплавка к 16-битовому целому. Целочисленному числу также потребуется некоторый подразумеваемый коэффициент масштабирования, основанный на соответствующих диапазонах значений.
Вот простой пример, чтобы сделать вещи более ясными. Скажем, float имеет диапазон от 0.00
до 10.00
. В этом случае я хочу, чтобы целое число находилось в диапазоне от 0 to 1000
. Обратите внимание на подразумеваемой масштабный коэффициент 100. В этом случае целое число имеет подразумеваемое масштабирование 100.
Я знаю, что IEEE 754 содержит 1 бит знака, 8 бит для экспоненты (с 127 смещения) и 23 бит для мантиссы.
Я знаю, что уравнение для восстановления значения из составных частей поплавка является:
поплавкового значение = (-1)^Sign_bit * (1 + мантисса) * 2^(экспонент-127).
Основная проблема, которую я вижу, заключается в работе с 16-разрядными целыми знаками (диапазон от -32768 до +32767) и предотвращением переполнения или недостаточного потока.
Я не понимаю, на что вы хотите ответить. –