在多种编程语言中寻找类似精度的数据类型,例如C / C ++,D,Go

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

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

通常,对于编译语言,浮点格式和精度归结为两件事:

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

它还可能取决于您给出的编译器选项(以及编译器的复杂程度) – 许多现代处理器都有向量指令,结果可能与使用“常规”浮点指令(例如FPU vs. 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浮点标准