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