我正在尝试使用两种或多种编程语言来实现一个带有浮点数的程序。该程序确实说了 50k 次迭代以最终将错误降低到非常小的值。
为了确保我的结果具有可比性,我想确保在不同语言中使用相同精度的数据类型。请问C/C++的float/double与D和Go中的float/double是否有对应关系。我希望 C/C++ 和 D 在这方面非常接近,但不确定。非常感谢。
我正在尝试使用两种或多种编程语言来实现一个带有浮点数的程序。该程序确实说了 50k 次迭代以最终将错误降低到非常小的值。
为了确保我的结果具有可比性,我想确保在不同语言中使用相同精度的数据类型。请问C/C++的float/double与D和Go中的float/double是否有对应关系。我希望 C/C++ 和 D 在这方面非常接近,但不确定。非常感谢。
一般来说,对于编译语言,浮点格式和精度归结为两件事:
它还可能取决于您提供的编译器选项(以及编译器通常的复杂程度) - 许多现代处理器都有向量指令,结果可能与使用“常规”浮点指令(例如 FPU 与x86 处理器上的 SSE)。有时,您可能还会看到差异,因为 x86 FPU 上的内部计算是 80 位的,计算完成后存储为 64 位。
但一般来说,给定相同的硬件和类似类型的编译器,我希望从两种不同的[足够相似的]语言获得相同的结果[和大致相同的性能]。
大多数语言要么只有“双”(通常是 64 位)或“单双”(例如浮点 - 通常是 32 位和双 - 在 C/C++ 中通常是 64 位 - 也可能是 D,但我不是那个进入D)。
在 Go 中,浮点类型遵循 IEEE-754 标准。
直接来自规范(http://golang.org/ref/spec#Numeric_types)
float32 the set of all IEEE-754 32-bit floating-point numbers
float64 the set of all IEEE-754 64-bit floating-point numbers
我不熟悉 D,但这个页面可能很有趣:http ://dlang.org/float.html 。
对于 C/C++,该标准不需要 IEEE-754,但在 C++ 中,您可以使用它is_iec559()
来检查您的编译器是否使用 IEEE-754。看到这个问题:如何检查 C++ 编译器是否使用 IEEE 754 浮点标准