1. ホーム
  2. floating-point

[解決済み] quiet NaNとsignaling NaNの違いは何ですか?

2022-07-05 23:16:42

質問

浮動小数点について読んでいて、演算によってNaNが発生することは理解できました。しかし、これらが具体的にどのような概念なのか理解できません。これらの違いは何ですか?

C++のプログラミングでは、どちらが生成される可能性がありますか?プログラマとして、sNaNを発生させるプログラムを書くことは可能でしょうか?

どのように解決するのですか?

演算の結果が静かなNaNである場合、プログラムが結果をチェックしてNaNを見るまで、何か異常があることを示すことはありません。 つまり、浮動小数点がソフトウェアで実装されている場合、浮動小数点ユニット (FPU) またはライブラリからの信号なしで計算が続行されます。 NaNが表示されると、通常はFPUから例外という形で信号が発生します。 例外が発生するかどうかは、FPUの状態に依存します。

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

POSIX/Unix システムでは、浮動小数点例外は通常、以下のハンドラを使用して捕捉されます。 SIGFPE .