Преобразование с фиксированной точкой: показатель степени 3124 с дробным числом 230 до значения Q25?

Мне нужно рассчитать значение фиксированной точки для формул:

e ^ ( Konst/x*y )

Я использую сторонние функции divide() и antilog(), например:

div = divide( Konst, x*y );
out = antilog( div ); 

Мой divide() дает на выходе
bits 23…0 fractional part (это на самом деле формат Q0.31 при смещении << 8)
и
bits 31…24 exponent.

antilog() ожидает на входе значение Q6.25.

Как я могу передать что-то значимое для antilog() в формате Q6.25?
Как мне перейти от одного формата к другому в этом конкретном случае?

p.s. Что произойдет, если divide выдаст очень большой результат, который не уместится в Q6.25 без масштабирования? В таком случае, как сделать e^(scale*Q6.25)?


person Danijel    schedule 31.01.2017    source источник
comment
Что такое Q6.25? Нет результатов в гугле.   -  person Paul Ogilvie    schedule 31.01.2017
comment
@PaulOgilvie: 32-битное значение с фиксированной запятой с диапазоном (-64,0, +64,0).   -  person MSalters    schedule 31.01.2017
comment
@PaulOgilvie Проверьте en.wikipedia.org/wiki/Q_(number_format).   -  person Danijel    schedule 31.01.2017


Ответы (1)


"биты 23…0 дробная часть (это на самом деле формат Q0.31 при сдвиге на ‹‹ 8" Ну, дело в том, что вы сдвигаете не на 8, а на экспоненциальную часть (биты 31..24). Примечание что показатель степени почти наверняка смещен; биты 00000000 НЕ являются показателем степени <<0, но, вероятно, >>127 или около того (см. документацию).

Итак, вычтите смещение, вычтите еще 6 для Q6.25 и сдвиньте.

person MSalters    schedule 31.01.2017
comment
Не предвзятый. This routine performs division of vectors written in Q31 format. It returns the fractional and exponential portion of the division result. Since the division may generate result greater than 1, it returns fractional portion frac in Q(31-exp) format and exponent exp so true division result in the Q0.31 may be found by shifting fractional part left by exponent value. - person Danijel; 31.01.2017
comment
Не могли бы вы подробнее рассказать о вычитании еще 6 для Q6.25 и смещении? Что вычитается, что сдвигается? Пример не помешал бы... - person Danijel; 31.01.2017
comment
@Danijel: Вам лучше прочитать о форматах с фиксированной и плавающей запятой. Подумайте, как вы представляете значение 2.0 в своем формате FP, в Q6.25 и Q4.27. Показатель FP означает умножение на 2^exp. А умножение на степень 2 — это битовый сдвиг. Следовательно, *2^exp эквивалентно <<exp. Если мы проигнорируем биты, выпадающие с обеих сторон, <<a >>b будет <<a-b при условии a>b, иначе >>b-a - person MSalters; 31.01.2017