c/c++语言开发共享如何在没有FPU的计算机上计算浮点数

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

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

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

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

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

    c标准允许浮点。

    编译器有责任将其转换为特定的硬件体系结构。

    如果硬件指令集支持浮点[并且大多数现代机器都支持],那么编译器很可能会使用它。

    否则,它将必须创建一个本机语言代码,该代码通过它自己模拟浮点的行为。 怎么做? 您可以在wikipeida页面和有关浮点算术的更详细的文章中阅读有关浮点的更多信息

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

    高端移动设备已经开始包括FPU,但并非所有人都拥有它们。 如果我们谈论的是高端以外的移动设备,你将找不到许多具有FPU的设备。

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

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

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

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

    完成后,您可以将结果标准化。 在高中我们使用十进制,通常只需要小数点前一位数,所以(例如)10001将被写为1.0001 x 10 4 。 在计算机上,细节有点不同(例如,我们处理的是二进制而不是十进制),但基本思想几乎相同。

      以上就是c/c++开发分享如何在没有FPU的计算机上计算浮点数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544776.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐