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

标签 performance visual-c++ x86 floating-point long-double

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

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

x86上的

  • double仅短2个字节,为什么编译器默认不使用10个字节的long double
  • 我可以举一个80位long doubledouble所获得的额外精度的示例吗?
  • Microsoft为什么默认情况下禁用long double
  • 就幅度而言,典型的x86/x64 PC硬件上的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/

    相关文章:

    c++ - 尝试在 Windows 中使用 C++ DLL 库编译 Cython 代码时出现链接错误 [LNK2019]

    x86 - 我的 macbook pro x86 linux 还是 x86_64 darwin?

    windows - 汇编中的非法指令

    python - 从python中的特定reddit线程获取所有评论

    PHP Getter 和 Setter 性能。性能在这里很重要吗?

    performance - Couchbase查询执行时间?

    c# - 使用 ffmpeg 时如何提高图像导出/提取速度?

    c++ - 如何使用gsoap在客户端无冲突地调用多个服务

    c++ - 我收到错误 : Missing ; before *, 但我没有遗漏它

    assembly - 引导加载程序在真实硬件上打印垃圾