按位创建64位浮点数

时间:2014-07-30 19:17:54

标签: c floating-point 32-bit

情况是我在32位嵌入式平台(Cortex-M4F)上有一个硬件FPU。我真的很想使用FPU,但该平台不提供64位浮点运算的硬件实现 - 任何64位操作都会触发硬故障。

但我还需要能够通过串口将几个关键的64位浮点数发送到PC。通过简单地复制IEEE 754浮点表示的组件,将float32升级到float64有一个很好的question here,所以这是我的起点。

但是,我真的希望能够使用int32累加器和float32小数组件之间的总和来填充此float64字段。我假设操作会起到以下作用:

  • 将累加器转换为float32;将其指数复制到最终的float64。
  • 确定累加器float32和小数float32的指数之间的差异。
  • 根据指数差异移动小数分量的尾数,并将其添加到累加器浮点数的尾数中 - 将此值放入float64。

这永远不会超出int32的范围,但我相信它的精度会比直线float32大得多,因为它会变大。

在我实施这个时,我应该注意哪些特殊问题?任何库或现有代码可能有助于编写和分解这些结构?谢谢!

1 个答案:

答案 0 :(得分:0)

将32位浮点数转换为64位的比特纠缠是相对简单的。 (虽然我会担心字节顺序。)

向24/53位尾数添加32位整数是一个更有趣的问题...涉及对齐尾数和整数(整理整数的符号,转换为符号和幅度)进行舍入和保护位随机播放,根据需要进行标准化和舍入。您需要64位无符号整数运算,移位等才能方便地执行此操作。 [我写过软件浮点库......这很有趣,但很棘手。]。

我猜你不能改变PC端接受两个双打并在那里添加?更容易,接受浮点数和整数!