【问题标题】:How floats are computed on a machine without an FPU如何在没有 FPU 的机器上计算浮点数
【发布时间】:2012-01-30 07:53:08
【问题描述】:

C 语言有一个数据类型float。有些机器有一个浮点处理器来执行所有的浮点计算。我的问题是:是否有一些机器没有浮点处理器?这种机器如何使用浮点数?

【问题讨论】:

  • 是的。就像回到 8086 天......
  • @MitchWheat:比这晚得多:)
  • @leppie:到了这个年纪,全是8086了!! ;)
  • 有些DSP处理器没有FPU的

标签: c floating-point


【解决方案1】:

许多小型控制器没有浮点单元。在那种情况下,有一个浮点软件库。

在 1980 年代中期,如果我们的系统有 8087(8086 和 8088 的 FPU),我们认为自己是幸运的。不幸的是,无论是否存在 8087,我们的软件都必须正常工作。这意味着如果 8087 指令丢失,则捕获并模拟它。

【讨论】:

    【解决方案2】:

    c 标准允许浮点数。

    编译器负责将其转换为特定的硬件架构。

    如果硬件 instruction set 支持浮点 [大多数现代机器都支持],那么 - 编译器很可能会使用它。

    否则,它必须自己创建一个模拟浮点行为的本地语言代码。它是如何完成的?你可以在wikipeida page 和这篇关于floating point arithmetics 的更详细的文章中阅读更多关于浮点的信息

    【讨论】:

    • 感谢您的澄清。
    【解决方案3】:

    直到并包括 486SX,没有 CPU 具有内置的 FPU 单元。

    至于微控制器,它们中的大多数都没有 FPU 单元。

    【讨论】:

    【解决方案4】:

    您会发现几乎所有现代台式计算机和服务器都包含 FPU。

    高端移动设备已开始包含 FPU,但并非所有设备都有。如果我们谈论的是高端以外的移动设备,您将找不到很多具有 FPU 的设备。

    在许多应用程序中,可以使用“定点算术”对小数进行算术运算——这不需要 FPU。

    在其他情况下,您可以执行与 FPU 相同的数学运算,但如果您必须使用其他算术原语自行构建它,而不是让复杂的芯片为您处理,则需要更长的时间。

    Donald Knuth's MMIXware 中提供了我最喜欢的定点处理器浮点仿真示例,这是一个用非常便携的 C 语言编写的完整处理器仿真。

    【讨论】:

      【解决方案5】:

      模拟浮点有点慢,但理论上相当简单。这就像大多数人在高中时学到的一样:你有一个带指数的数字。要加或减,您必须调整数字,使它们具有相同的指数,然后加/减尾数。要进行乘法或除法,您可以乘/除尾数并加/减指数。

      完成后,您可以对结果进行规范化。在高中,我们使用十进制,并且通常需要在小数点前精确一位,因此(例如)10001 将被写为 1.0001 x 104。在计算机上,细节略有不同(例如,我们处理的是二进制而不是十进制),但基本思想几乎相同。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        相关资源
        最近更新 更多