0

我正在尝试使用两种或多种编程语言来实现一个带有浮点数的程序。该程序确实说了 50k 次迭代以最终将错误降低到非常小的值。

为了确保我的结果具有可比性,我想确保在不同语言中使用相同精度的数据类型。请问C/C++的float/double与D和Go中的float/double是否有对应关系。我希望 C/C++ 和 D 在这方面非常接近,但不确定。非常感谢。

4

2 回答 2

2

一般来说,对于编译语言,浮点格式和精度归结为两件事:

  1. 用于实现硬件不直接支持的浮点函数的库。
  2. 运行系统的硬件。

它还可能取决于您提供的编译器选项(以及编译器通常的复杂程度) - 许多现代处理器都有向量指令,结果可能与使用“常规”浮点指令(例如 FPU 与x86 处理器上的 SSE)。有时,您可能还会看到差异,因为 x86 FPU 上的内部计算是 80 位的,计算完成后存储为 64 位。

但一般来说,给定相同的硬件和类​​似类型的编译器,我希望从两种不同的[足够相似的]语言获得相同的结果[和大致相同的性能]。

大多数语言要么只有“双”(通常是 64 位)或“单双”(例如浮点 - 通常是 32 位和双 - 在 C/C++ 中通常是 64 位 - 也可能是 D,但我不是那个进入D)。

于 2013-01-31T17:47:23.937 回答
2

在 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 浮点标准

于 2013-01-31T18:01:18.537 回答