【问题标题】:Bitwise creation of 64-bit float按位创建 64 位浮点数
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多