在多种编程语言中寻找类似精度的数据类型,例如C / C ++,D,Go
我正在尝试使用两种或更多编程语言实现具有浮点数的程序。 该程序确实说50k迭代最终将错误带到非常小的值。
为了确保我的结果具有可比性,我想确保在不同语言中使用相同精度的数据类型。 你能否告诉C / C ++的float / double与D和Go之间是否存在对应关系。 我希望C / C ++和D在这方面非常接近,但不确定。 非常感谢。
通常,对于编译语言,浮点格式和精度归结为两件事:
- 该库用于实现硬件不直接支持的浮点函数。
- 系统运行的硬件。
它还可能取决于您给出的编译器选项(以及编译器的复杂程度) – 许多现代处理器都有向量指令,结果可能与使用“常规”浮点指令(例如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浮点标准