c - 定点转换 : 31. ..24 指数与 23...0 小数到 Q25 值?

标签 c signal-processing fixed-point

我需要计算公式的定点值:

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值(value)。

如何向 antilog() 提供有意义的内容?在 Q6.25格式?
在这种特定情况下,我如何从一种格式转到另一种格式?

附注 如果 divide 会发生什么给出了一个非常大的输出,无法放入 Q6.25没有缩放?那样的话,怎么办e^(scale*Q6.25)

最佳答案

“位 23…0 小数部分(这实际上是移位 << 8 时的 Q0.31 格式” 好吧,重点是你不是移动 8,而是移动指数部分(位 31..24)。请注意,指数几乎肯定是有偏差的;位 00000000 不是指数 <<0但可能>>127或者。 (检查文档)。

因此,减去偏差,为 Q6.25 再减去 6,然后移动。

关于c - 定点转换 : 31. ..24 指数与 23...0 小数到 Q25 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41955058/

相关文章:

c - 掷骰子程序有问题

audio - "Winamp style"频谱分析仪

matlab - 我将如何对 .wav 文件进行下采样,然后使用 nyquist 重建它? - 在 MATLAB 中

c++ - 我的定点运算实现是否正确?

math - 如何使用 32 位除法指令执行 64 位除法?

optimization - 这些天什么时候使用定点

c - 如果我不打印 char 数组,函数将返回错误值

c - 如何访问用户态内存?

matlab - 在MATLAB中以x轴的对数刻度绘制频率响应

c - 如何让openmp在子程序中正确运行(c语言)