双IEEE 754替代品

Double - IEEE 754 alternatives

本文关键字:替代品 IEEE      更新时间:2023-10-16

根据以下站点:http://en.cppreference.com/w/cpp/language/types

"双精度浮点型。通常为IEEE-754 64位浮点型"。

上面写着"通常"。C++double还可以使用哪些其他可能的格式/标准?什么编译器使用IEEE格式的替代方案?还是建筑?

Vaxen、Crays和IBM大型机,仅举几个仍在广泛使用的大型机。大多数(所有?)现在也可以做IEEE浮点,但有时只有一个特殊的附加组件。在其他情况下(IBM)IEEE算法可能会带来显著的速度损失。

对于较旧的机器,大多数大型机(Unisys、Control Data等)使用独特的浮点格式,其中大多数甚至与IEEE不太相似,更不用说实际符合了。

要了解一堂简短的历史课,您可以查看"英特尔浮点案例研究"。

英特尔编译器在优化时有一个默认打开的选项,可启用所谓的快速数学功能。这使得计算速度更快,但降低了对IEEE标准的严格遵守。可以通过fp模型选项强制执行严格的标准遵从性。

我相信,如果愿意放弃严格遵守IEEE标准,NVidia GPU的CUDA语言也有一个明显更快的数学库。这不仅使数学运算更快,而且特别减少了用于超越函数的寄存器数量。

是否需要合规取决于具体情况。我们在英特尔优化中遇到了问题,不得不启用fp-model strict选项,以确保使用双精度数学计算得到正确的结果。

似乎今天大多数计算机都使用IEEE-754。但替代方案似乎以前就有了。像多余128和压缩BCD这样的格式以前也使用过(http://aplawrence.com/Basics/floatingpoint.html)。维基百科条目也列出了一些http://en.wikipedia.org/wiki/Floating_point

在回答"C++还可以使用哪些其他可能的格式/标准?"时,可能值得补充的是,Atmel AVR的gcc(在一些Arduino中使用的是8位数据CPU)没有将double实现为64位。

请参阅GCC wiki、avr GCC页面,特别是"偏离标准"的"双重"小节,其中写道

double只有32位宽,其实现方式与float

我相信其他CPU也有类似的实现,但我找不到它们。