【问题标题】:Is there an open-source c/c++ implementation of IEEE-754 operations? [closed]是否有 IEEE-754 操作的开源 c/c++ 实现? [关闭]
【发布时间】:2010-02-02 19:01:19
【问题描述】:

我正在寻找 IEEE-754 操作的参考实现。有这种事吗?

【问题讨论】:

  • 您的意思是“参考实现”是指“我可以复制并确信它是正确的”,还是指“IEEE 作为非规范性描述提供的东西” C++ 代码形式的 IEEE-754 标准”?对于前者,您正在寻找“软件浮点仿真”,例如这里是 GCC 的函数列表:gcc.gnu.org/onlinedocs/gccint/Soft-float-library-routines.html
  • 我应该补充一点,作为 GCC,我希望后端编写者可以用特定于平台的代码替换这些函数的纯 C 实现。但我还没有真正检查过。
  • github.com/bobbl/float754 是另一个项目。

标签: c++ open-source floating-point ieee-754


【解决方案1】:

我相信 C 库 SoftFloatfdlibm 适合您的需求。其他包括 Linux (GNU libc, glibc) 或 *BSD libc 的 math functions。最后,CRlibm 你也应该感兴趣。

Ulrich Drepper 有一个有趣的look at different math libraries,可能也值得一读。

【讨论】:

  • SoftFloat 来自 John R. Hauser,他在 TOPLAS 文章中写了一篇关于使用 IEEE 异常的文章。我不知道 Hauser 确实编写了自己的实现,因此很可能他实际上已经编写了参考实现。
  • 谢谢。 SoftFloat 绝对是我想要的。我也会看看其他的。
【解决方案2】:

我必须让你失望:几乎没有。

虽然技术上存在符合 IEEE-754 的系统,因为它们确实 不实现标准中描述的非必需功能,参考 实现允许

  • 访问所有舍入模式
  • 支持信号 NaN
  • 支持所有五个陷阱的陷印

在标准语言中不存在。这会导致反复出现的问题 威廉·卡汉(William Kahan),标准及其改编背后的主要力量 在英特尔处理器上。

我不知道是否有一些深奥的语言确实支持它们, 但我可以排除 Java、C#、C++、Fortran。

编辑:虽然缺乏编译器支持,但我建议 Hausers SoftFloat mctylr 给出的实现。豪瑟知道他在做什么。

http://portal.acm.org/citation.cfm?id=227699.227701&coll=portal&dl=ACM&CFID=77938829&CFTOKEN=18578907

【讨论】:

  • “一些支持它们的深奥语言”。我认为这种情况更多的是所有语言都支持这些,但是硬件的潜在差异或不完整的硬件合规性才是问题所在。尤其是当您考虑到语言通常以独立于体系结构的方式定义,然后由运行在许多体系结构上的程序编译时。将浮点数学卸载到硬件的编程语言无法做出 IEEE754 保证。
【解决方案3】:

一个相当混乱的问题;在 C++ 中,假设此类细节由硬件或编译器处理。所以,在 C++ 中,浮点加法是

float a = 1.0;
float b = 2.0;
float c = a + b;

我确定这不是您真正的意思;也许你会从this page 中受益,它试图在 javascript 中模拟符合 IEEE-754 的硬件?

【讨论】:

  • 不,查看编译器的源代码不会有帮助,因为您将查看 C 代码以生成符合 IEEE-754 的汇编代码,而不是执行 IEEE 的 C 代码-754 次计算。
  • 旧的 ARM 芯片(可能还有一些新的)没有 FPU,因此查看针对 ARM 的编译器的源代码会很有帮助,因为它必须能够执行浮点运算和“在软件中”的双重算术。当然,这些实现将被猛烈优化,并且可能会使用在 C 中并非完全无关紧要的 CPU 操作。
【解决方案4】:

你可以用python解决一个问题。 python有一个函数可以转换IEEE-754 32/64位精度HEX浮点数

   import struct
   struct.unpack('!f', '41973333'.decode('hex'))[0]

您可以用 python 编写应用程序,也可以创建一个 python 函数并用 C/C++ 调用它

我不确定如何从 C/C++ 调用 python,但这是可能的。 Calling Python functions from C++

【讨论】:

  • 这似乎需要从 C++ 到 Python 的大量工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2017-03-11
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
相关资源
最近更新 更多