HP-UX的libc有这个功能fesetflushtozero http://h21007.www2.hp.com/portal/download/files/unprot/fp/manpages/fesetflushtozero.3M.htm在“逐渐下溢”和“刷新到零”之间切换浮点行为。
尽管梳理了几个 Unix libc(包括 glibc)的文档和手册页,我还没有找到如何在其他 Unices 中实现同样的事情。我对 Linux/glibc、Solaris 和 AIX 特别感兴趣。
正如您无疑已经注意到的那样,没有标准的方法可以做到这一点(就此而言,没有“清零”的标准定义,也没有硬件实现它的任何要求)。因此,执行此操作的所有方法都是特定于平台的。要在列表中添加更多内容,因为这是一个有用的参考:
操作系统/英特尔:fesetenv(_FE_DFL_DISABLE_SSE_DENORMS_ENV)
。请注意,这only效果算术完成float
or double
,这是使用 SSE2 完成的(因此得名);long double
算术是使用旧版 x87 指令执行的,这些指令不支持刷新。
iOS/arm:在iOS下的32位ARM上,刷新到零是默认模式。你可以转动它off对于 VFP 指令(但不适用于 NEON),通过清除__fpscr_flush_to_zero
一点在fenv_t
对象并安装该环境fesetenv( )
.
iOS/arm64:fesetenv(_FE_DFL_DISABLE_DENORMS_ENV)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)