当前位置 : 主页 > 网络安全 > 测试自动化 >

长双的性能影响.为什么C选择64位而不是硬件的80位作为默认值?

来源:互联网 收集:自由互联 发布时间:2021-06-22
具体来说,我说的是x87 PC架构和C编译器. 我正在编写自己的解释器,双数据类型背后的推理使我感到困惑.特别是在效率方面.有人可以解释为什么C决定64位双倍而不是硬件本机80位双?为什
具体来说,我说的是x87 PC架构和C编译器.

我正在编写自己的解释器,双数据类型背后的推理使我感到困惑.特别是在效率方面.有人可以解释为什么C决定64位双倍而不是硬件本机80位双?为什么硬件固定在80位双,因为它没有对齐?每个的性能影响是什么?我想使用80位双精度作为我的默认数字类型.但是编译器开发人员的选择让我担心这不是最好的选择.

> x86上的double只缩短了2个字节,为什么编译器默认不使用10个字节的长双精度?
>我可以得到一个80位长双倍与双倍得到的额外精度的例子吗?
>为什么Microsoft默认禁用long double?
>就幅度而言,在典型的x86 / x64 PC硬件上,差多少/慢一倍?

根据Mysticial的说法,答案是微软将SSE2用于其双数据类型.与现代CPU扩展相比,浮点单元(FPU)x87被视为过时且速度较慢. SSE2不支持80位,因此编译器选择64位精度.

在32位x86架构上,由于所有CPU还没有SSE2,Microsoft仍然使用浮点单元(FPU)x87,除非给出了编译器开关/ arch:SSE2.哪个代码与那些较旧的代码不兼容?的CPU.

网友评论