15

すべてのドキュメント (標準の)はかなり紛らわしいですが、浮動小数点例外の「ノンストップ モード」の概念fenv.hについては特に混乱しています。feholdexcept私が知る限り、IEEE 浮動小数点の実装では、例外はデフォルトで非シグナリング/「ノンストップ」であり、デフォルトでfenv.hない限り、インターフェイスはシグナリング モードを有効にする方法を提供していないようです。feholdexcept非 IEEE システムまたはシグナリング例外マスクを設定するための非標準拡張機能を備えたシステムを除いて、全体の概念は役に立たないのですか?

4

1 に答える 1

6

ライブラリを実装していて、コードを呼び出す前に呼び出し元が浮動小数点環境で何をするかについて何も知らないとします。例外のマスクを解除し、ゼロ除算で値 42 を生成するカスタム トラップ ハンドラーをインストールする可能性があります。ライブラリがゼロ除算のデフォルトの IEEE-754 動作に依存しているとします。関数は、feholdexceptこの動作を強制する手段を提供します。マスクされていない例外を含む呼び出し元の環境は、fesetenv関数を使用して復元できます。

これは確かに使用法としてはかなりわかりにくい特殊なケースですが、率直に言って、ほとんどのプログラマーにとっては、すべてがかなりわかりにくいものです。fenv.h

于 2011-06-13T21:57:59.657 に答える