фиксированная точка FX обозначения и преобразования - PullRequest
1 голос
/ 03 марта 2012

У меня есть запись fx1.15. Основное целочисленное значение равно 63183 (значение регистра).

Теперь, согласно википедии, полная длина составляет 15 бит. Значение не подходит внутри, верно?

Итак, предполагая, что это значение fx1.16, как мне преобразовать его в удобочитаемое значение?

1 Ответ

1 голос
/ 03 апреля 2012

Чтобы преобразовать значение с фиксированной запятой в нечто читаемое человеком, выполните деление с плавающей запятой на 2 на количество дробных битов.Например, если имеется 15 дробных битов, 2 ^ 15 = 32768, поэтому вы должны использовать что-то вроде этого:

int x = <fixed-point-value-in-1.15-format>
printf("x = %g\n", x / 32768.0);

Теперь преобразование чисел с фиксированной запятой в число с плавающей запятой и вызов printf() стоят дорогооперации, и они обычно разрушают любую производительность, полученную с помощью фиксированной точки.Я предполагаю, что вы делаете это только для диагностических целей.

Кроме того, обратите внимание, что если ваша платформа выполняет операции с фиксированной запятой, потому что операции с плавающей запятой запрещены или недоступны, вам придется делать что-то другое,вдоль линий вручную делать десятичное преобразование.Смоделируйте целое число как базовое значение с плавающей точкой, умноженное на 32768, и перейдите оттуда.Здесь есть некоторый полезный код с фиксированной точкой .

ps. Я не уверен, что вы все еще заинтересованы в этом ответе, аширк, (я написал его больше для других), но если выдобро пожаловать в стек переполнения!

...