双IEEE 754替代品
Double - IEEE 754 alternatives
根据以下站点: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也有类似的实现,但我找不到它们。
- C++中原子的替代品<variant>
- C++sscanf_s的替代品
- 长双精度C++是IEEE二进制128的实现吗?
- getline的替代品
- 什么是 std::function::argument_type 的替代品?
- 有DirectShow的替代品吗?
- 智能指针作为 QObject::d eleteLater() 的替代品
- 十六进制到浮点数 IEEE 754 双精度 c++
- C++中 mktime 的替代品
- 对于C++,是否有任何现代的 std::strchr() 替代品?
- shared_future是<void>condition_variable的合法替代品吗?
- 在C++中编写符合 IEEE-754 标准的双/浮子除法的最快方法是什么?
- NAN繁殖和IEEE 754标准
- 这是山塔的替代品
- 是浮点操作,导致IEC 559/IEEE 754浮点类类型的无限行为
- STD :: Referent_wrapper/std :: std :: vector的selution_ptr替代品
- 更好的替代品?
- 排序向量上 std::find_if 和 std::bind2nd 的替代品
- 提升勒让德多项式的 gsl_sf_legendre_sphPlm_array() 替代品
- 双IEEE 754替代品