根据以下网站: http://en.cppreference.com/w/cpp/language/types
“双精度浮点型。通常为IEEE-754 64位浮点型”。
它说“通常”。 C ++ double
可以使用哪些其他可能的格式/标准?什么编译器使用IEEE格式的替代品?还是建筑?
答案 0 :(得分:6)
Vaxen,Crays和IBM大型机,仅举几例仍在广泛使用的产品。大多数(全部?)那些现在也可以做IEEE浮点数,但有时只有一个特殊的附加组件。在其他情况下(IBM),IEEE算法可能会带来显着的速度损失。
对于较旧的机器,大多数大型机(Unisys,控制数据等)使用独特的浮点格式,其中大多数甚至不像IEEE,更不用说实际符合。
答案 1 :(得分:3)
对于简短的历史课程,您可以查看Intel Floating Point Case Study。
英特尔编译器在优化时默认启用选项,启用所谓的fast-math feature。这使得数学运算更快,但严格遵守IEEE标准。可以强制严格遵守fp-model option的标准。
我相信如果有人愿意放弃严格遵守IEEE标准,那么NVidia GPU的CUDA语言也会有更快的数学库。这不仅使数学运算更快,而且特别减少了用于超越函数的寄存器数量。
是否需要合规取决于具体情况。我们遇到了英特尔优化问题,必须打开fp-model strict
选项才能确保使用双精度数学运算得到正确的结果。
答案 2 :(得分:2)
现在大多数计算机似乎都使用IEEE-754。但是之前似乎已有替代品。之前使用过量128和打包BCD等格式(http://aplawrence.com/Basics/floatingpoint.html)。维基百科条目也有一些列出http://en.wikipedia.org/wiki/Floating_point
答案 3 :(得分:0)
在回答“C ++可以使用哪些其他可能的格式/标准?”时,可能值得补充一点,Atmel AVR的gcc(8位数据CPU,在某些Arduinos中使用)没有实现{{1作为64位。
请参阅GCC wiki, avr-gcc page,特别是'double' subsection of 'Deviations from the Standard',其中包含
double
只有32位宽,并以与之相同的方式实现double
我相信其他CPU有类似的实现,但我找不到它们。