2

HP-UX の libc には、fesetflushtozero浮動小数点の動作を「段階的なアンダーフロー」と「ゼロへのフラッシュ」の間で切り替える機能があります。

いくつかの Unix libc (glibc を含む) のドキュメントとマニュアル ページをくまなく調べたにもかかわらず、他の Unix で同じことを実現する方法をまだ見つけていません。Linux/glibc、Solaris、AIX に特に関心があります。

4

2 に答える 2

4

ご指摘のとおり、これを行うための標準的な方法はありません (さらに言えば、「ゼロにフラッシュ」の標準的な定義も、ハードウェアがそれを実装する必要もありません)。したがって、これを行う手段はすべてプラットフォーム固有です。これは便利なリファレンスなので、リストにさらにいくつか追加するには:

  • OSX/インテル: fesetenv(_FE_DFL_DISABLE_SSE_DENORMS_ENV). これは、 SSE2 を使用して行われるorで行われる演算にのみ影響することに注意してください(名前の由来)。演算は、フラッシュをサポートしない従来の x87 命令を使用して実行されます。floatdoublelong double

  • iOS / arm: iOS の 32 ビット ARM では、flush-to-zero がデフォルト モードです。オブジェクトのビットをクリアし .__fpscr_flush_to_zerofenv_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 に答える