gnuradio中的浮点算术

安德烈·罗迪诺夫(Andrey Rodionov)

我试图了解GNURadio中的浮点运算,并开始研究他们的测试。该测试将生成随机浮点输入和随机抽头,然后将所有内容传递给滤波器。稍后,它使用一些余量比较预期输出和实际输出。

关于该边距有一个神秘的评论

    // we use a sloppy error margin because on the x86 architecture,
    // our reference implementation is using 80 bit floating point
    // arithmetic, while the SSE version is using 32 bit float point
    // arithmetic.

我在源代码中找不到任何80bit算术。谁能帮我?或者只是解释为什么误差幅度取决于丝锥尺寸?

6502

在x86 + 87上,即使简单地使用它double也可以获得80位精度的中间结果,因为FPU堆栈内部使用80位浮点数。

如果您的代码期望并依赖于64位或32位浮点运算的四舍五入,您会感到惊讶。

例如,我x < y被真实性之类的东西打了好几次,但是在分配之后,z = x您可能会得到z >= y(声明了所有var double)。如果x最终将其分配到80位FPU寄存器中,z而是内存中的实际64位浮点变量,则可能会发生这种情况

g ++有一个避免这些问题的特定选项(-ffloat-store),可以防止使用多余的位(但是会大大降低数学运算的代码的速度)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章