【发布时间】:2014-09-22 14:02:30
【问题描述】:
情况是我在一个具有硬件 FPU 的 32 位嵌入式平台 (Cortex-M4F) 上。我真的很想使用 FPU,但该平台没有提供 64 位浮点操作的硬件实现——任何 64 位操作都会触发硬故障。
但我还需要能够通过串行端口向 PC 发送一些关键的 64 位浮点数。有一个很棒的question here 关于通过简单地复制 IEEE 754 浮点表示的组件来将 float32 升级到 float64,所以这就是我的出发点。
但是,我真的希望能够使用 int32 累加器和 float32 小数部分之间的总和结果填充这个 float64 字段。我认为该操作会产生以下效果:
- 将累加器转换为float32;将其指数复制到最终的 float64。
- 确定累加器 float32 和小数 float32 的指数之间的差异。
- 根据指数差移动小数部分的尾数,并将其添加到累加器浮点数的尾数-将此值放入float64。
这永远不会超出 int32 的范围,但我相信随着幅度变大,它的精度会比直接 float32 好得多。
在实现此功能时,是否有任何特别需要注意的问题?任何可以帮助组合和分解这些结构的库或现有代码?谢谢!
【问题讨论】:
-
如果您正在编写 C 代码,当您转换为
double时会发生什么?这会生成 64 位操作吗? -
是的,您的 C 编译器可能能够模拟 64 位浮点数并为您处理所有这些。
-
浮动的幅度范围有限制吗?
-
double的输入和输出触发硬故障。在 GCC 中启用硬浮动似乎是一个全有或全无的交易。
标签: c floating-point 32-bit