web-dev-qa-db-ja.com

クワイエットNaNとシグナルNaNの違いは何ですか?

浮動小数点について読んだことがありますが、NaNは演算の結果である可能性があることを理解しています。しかし、これらの概念が何であるかを正確に理解することはできません。違いは何ですか?

C++プログラミング中に作成できるのはどれですか?プログラマーとして、sNaNを引き起こすプログラムを作成できますか?

78
JalalJaberi

操作の結果が静かなNaNになった場合、プログラムが結果を確認してNaNを検出するまで、異常なことを示す兆候はありません。つまり、浮動小数点がソフトウェアで実装されている場合、浮動小数点ユニット(FPU)またはライブラリからの信号なしで計算が続行されます。シグナルNaNは、通常FPUからの例外の形式でシグナルを生成します。例外がスローされるかどうかは、FPUの状態によって異なります。

C++ 11では、いくつかの言語 浮動小数点環境の制御 が追加され、 NaNの作成およびテストの標準化された方法 が提供されます。ただし、コントロールが実装されているかどうかは十分に標準化されておらず、通常、浮動小数点例外は標準C++例外と同じ方法でキャッチされません。

POSIX/Unixシステムでは、通常、浮動小数点例外は [〜#〜] sigfpe [〜#〜] のハンドラーを使用してキャッチされます。

55
wrdieter