具体来说,我谈论的是x87 PC架构和C编译器。
我正在编写自己的解释器,而double
数据类型背后的推理使我感到困惑。特别是在效率方面。有人可以解释为什么C选择了64位double
而不是硬件 native 的80位double
吗?以及为什么硬件基于80位的double
定位,因为它未对齐?每种性能都有什么影响? 我想为我的默认数字类型使用80位double
。 但是,编译器开发人员的选择让我担心,这不是最佳选择。
x86上的
double
仅短2个字节,为什么编译器默认不使用10个字节的long double
? long double
与double
所获得的额外精度的示例吗? long double
? long double
差多少/慢得多? 最佳答案
根据Mysticial的回答,Microsoft将 SSE2 用于其double
数据类型。与现代CPU扩展相比,浮点单元(FPU)x87被视为过时且较慢。 SSE2不支持80位,因此编译器选择64位精度。
在32位x86体系结构上,由于所有CPU都还没有SSE2,因此,除非给出了编译器开关/arch:SSE2
,否则Microsoft仍将使用浮点单元(FPU)x87。哪个使代码与较旧的代码不兼容? CPU。
关于性能影响长双倍。为什么C选择默认的是64位而不是硬件的80位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256019/