2

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

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

4

2 回答 2

4

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

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

  • iOS / arm:在 iOS 下的 32 位 ARM 上,flush-to-zero 是默认模式。您可以通过清除对象中__fpscr_flush_to_zero位并使用.fenv_tfesetenv( )

  • iOS / arm64 fesetenv(_FE_DFL_DISABLE_DENORMS_ENV):。

于 2013-11-11T11:11:50.647 回答
0

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

特定于平台,您有:

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

于 2013-11-11T09:39:37.070 回答