2010-04-18 2 views
1

У меня есть приложение, использующее 24-битное вычисление с фиксированной точкой. Я переношу его на аппаратное обеспечение, которое поддерживает плавающие точки, поэтому для оптимизации скорости мне нужно преобразовать все вычисления с фиксированной точкой в расчет с плавающей запятой.Преобразование с плавающей запятой из алгоритма с фиксированной точкой

Для этого фрагмента кода, он вычисляет мантиссу

for(i=0;i<8207;i++) 
{ 
    // Do n^8/7 calculation and store 
    // it in mantissa and exponent, scaled to 
    // fixed point precision. 

} 

Так с этим вычисления, делает преобразовать целое число мантиссы и экспоненты масштабируется с точкой точности фиксированной (23 бита). Когда я попытался преобразовать его в float, деля часть мантиссы точными битами и вычитая экспоненциальную часть прецизионным битом, она действительно работает . Пожалуйста, помогите предложить лучший способ сделать это.

ответ

2

Просто вычислить коэффициент преобразования и умножить на него. Какое значение представляет 1.0 в вашей системе с фиксированной точкой? Умножьте на 1.0 /, и у вас будет конверсия.

Фиксированная точка обычно относится к фиксированному количеству бит для целочисленной части и фиксированному количеству бит для дробной части. По вашему описанию я собираюсь предположить, что у вас есть 1 бит целых чисел и 23 бит фракции; поэтому ваше представление 1.0 равно 0x80000. Коэффициент пересчета составляет 1.0/0x80000.

double conversionFactor = 1.0/0x80000; 
floating = fixed * conversionFactor; 
+0

Спасибо за ответ. Можете ли вы, пожалуйста, продумать его с помощью удобного примера, поскольку это очень поможет. – Viks

1

Если ваши номера фиксированной точкой имеют 23 бита фракции,

f = n * (1.0/0x800000) 
+0

Должен ли он применяться как для мантиссы, так и для экспоненты. или только на мантиссе. Что делать с экспоненциальной частью. – Viks

+1

Фиксированная точка не имеет экспоненциальной части. –

Смежные вопросы