我正在寻找 IEEE-754 操作的参考实现。有这样的事吗?
4 回答
我相信 C 库SoftFloat和fdlibm适合您正在寻找的东西。其他包括 Linux(GNU libc、glibc)或 *BSD libc 的数学函数。最后,您也应该对CRlibm感兴趣。
Ulrich Drepper 对不同的数学库进行了有趣的研究,这可能也值得一读。
我必须让你失望:几乎没有。
虽然技术上存在符合 IEEE-754 的系统,因为它们没有实现标准中描述的非必需功能,但参考实现允许
- 访问所有舍入模式
- 支持信令 NaN
- 支持捕获所有五个陷阱
在标准语言中不存在。这导致了威廉·卡汉(William Kahan)反复出现的困境,他是标准背后的主要力量及其在英特尔处理器上的适应。
我不知道是否有一些深奥的语言确实支持它们,但我可以排除 Java、C#、C++、Fortran。
编辑:虽然缺乏编译器支持,但我建议 mctylr 给出的 Hausers SoftFloat 实现。豪瑟知道他在做什么。
一个相当令人困惑的问题;在 C++ 中,假设此类细节由硬件或编译器处理。因此,在 C++ 中,浮点加法将是
float a = 1.0;
float b = 2.0;
float c = a + b;
我确定这不是您的实际意思;也许您会从这个试图在 javascript 中模拟符合 IEEE-754 的硬件的页面中受益?
一种解决方法可以解决您的问题。python有一个可以转换IEEE-754 32/64位精度HEX浮点的功能
import struct
struct.unpack('!f', '41973333'.decode('hex'))[0]
您可以使用 python 编写应用程序,也可以创建一个 python 函数并在 C/C++ 中调用它
我不确定如何从 C/C++ 调用 python,但这是可能的。 从 C++ 调用 Python 函数