17

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

4

4 回答 4

8

我相信 C 库SoftFloatfdlibm适合您正在寻找的东西。其他包括 Linux(GNU libc、glibc)或 *BSD libc 的数学函数。最后,您也应该对CRlibm感兴趣。

Ulrich Drepper 对不同的数学库进行了有趣的研究,这可能也值得一读。

于 2010-02-02T19:37:55.747 回答
4

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

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

  • 访问所有舍入模式
  • 支持信令 NaN
  • 支持捕获所有五个陷阱

在标准语言中不存在。这导致了威廉·卡汉(William Kahan)反复出现的困境,他是标准背后的主要力量及其在英特尔处理器上的适应。

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

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

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

于 2010-02-02T19:44:48.613 回答
1

一个相当令人困惑的问题;在 C++ 中,假设此类细节由硬件或编译器处理。因此,在 C++ 中,浮点加法将是

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

我确定这不是您的实际意思;也许您会从这个试图在 javascript 中模拟符合 IEEE-754 的硬件的页面中受益?

于 2010-02-02T19:14:15.960 回答
-2

一种解决方法可以解决您的问题。python有一个可以转换IEEE-754 32/64位精度HEX浮点的功能

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

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

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

于 2011-12-21T10:56:46.723 回答