【问题标题】:Equivalent of fesetflushtozero() on various Unices等价于各种 Unices 上的 fesetflushtozero()
【发布时间】:2013-11-21 12:36:28
【问题描述】:

HP-UX 的 libc 具有 fesetflushtozero 功能,可在“逐渐下溢”和“清零”之间切换浮点行为。

尽管梳理了几个 Unix libc(包括 glibc)的文档和手册页,但我还没有找到如何在其他 Unices 中实现相同的目标。我对 Linux/glibc、Solaris 和 AIX 特别感兴趣。

【问题讨论】:

    标签: solaris aix glibc hp-ux floating-point


    【解决方案1】:

    我想知道为什么 C99/UNIX 标准 函数 fesetround(FE_TOWARDZERO) 不适合您 - 在所有这些平台上都是一样的,包括 HP/UX。

    特定于平台,您有:

    除了fesetround() 之外,找不到任何适用于 AIX 的内容。

    【讨论】:

    • 向零舍入和归零具有完全不同的语义。
    • 感谢 Solaris 函数,它可以满足我的需要……但我认为您的其余答案混淆了舍入模式和清零
    【解决方案2】:

    正如您无疑指出的那样,没有标准的方法可以做到这一点(就此而言,没有“清零”的标准定义,也没有硬件实现它的任何要求)。因此,执行此操作的所有方法都是特定于平台的。要在列表中添加更多内容,因为这是一个有用的参考:

    • OSX/英特尔:fesetenv(_FE_DFL_DISABLE_SSE_DENORMS_ENV)。请注意,这影响在 floatdouble 中完成的算术,这是使用 SSE2 完成的(因此得名); long double 算术是使用不支持刷新的旧版 x87 指令执行的。

    • iOS / arm:在 iOS 下的 32 位 ARM 上,清零是默认模式。您可以通过清除fenv_t 对象中的__fpscr_flush_to_zero 位并使用fesetenv( ) 安装该环境,将其关闭 用于VFP 指令(但不适用于NEON)。

    • iOS / arm64:fesetenv(_FE_DFL_DISABLE_DENORMS_ENV)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多