性能影响长倍。为什么C会默认选择64位而不是硬件的80位?

uni*_*n83 5 floating-point performance x86 long-double visual-c++

具体来说,我谈论的是x87 PC架构和C编译器。

我正在编写自己的解释器,double数据类型背后的推理使我感到困惑。特别是在效率方面。有人可以解释为什么C选择了64位double而不是硬件本机80位double吗?又为什么硬件没有设置在80位double上呢?每种性能都有什么影响?我想使用80位double作为默认数字类型。但是编译器开发人员的选择让我担心这不是最佳选择。

  1. double在x86上仅短2个字节,为什么编译器long double默认不使用10个字节?
  2. 我可以举一个80位long doublevs所带来的额外精度的例子double吗?
  3. 为什么Microsoft long double 默认情况下禁用
  4. 就数量而言,long double典型的x86 / x64 PC硬件的差/慢多少?

uni*_*n83 3

根据 Mysticial 的说法,答案是 Microsoft 使用SSE2作为其double数据类型。与现代 CPU 扩展相比,浮点单元 (FPU) x87 被视为过时且缓慢。SSE2 不支持 80 位,因此编译器选择 64 位精度。

/arch:SSE2在 32 位 x86 架构上,由于所有 CPU 还没有 SSE2,除非给出编译器开关,否则 Microsoft 仍然使用浮点单元 (FPU) x87 。这使得代码与旧代码不兼容?CPU。