Преобразование с плавающей точкой из алгоритма с фиксированной точкой - PullRequest
1 голос
/ 18 апреля 2010

У меня есть приложение, использующее 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 бита). Когда я попытался преобразовать его в число с плавающей точкой, разделив часть мантиссы на биты точности и вычтя часть экспоненты на бит точности, это действительно так ». т работа. Пожалуйста, помогите предложить лучший способ сделать это.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2010

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

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

double conversionFactor = 1.0 / 0x80000;
floating = fixed * conversionFactor;
1 голос
/ 18 апреля 2010

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

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