非正規浮動小数点
結果が非正規になる浮動小数点演算
説明
このチェックでは、浮動小数点演算の結果が非正規になるかどうかを判別します。
非正規数とは、仮数部の上位桁に 0 を付けずに表現できる最小の浮動小数点数よりも小さな値のことです。非正規数の存在は有効桁数が失われることを示します。この損失はそれ以降の演算に累積し、最終的には予期しない値につながります。非正規数は、ハードウェアのサポートがないターゲットでの実行速度を低下させる可能性もあります。
既定では、このチェックの結果は検証結果に表示されません。チェックの結果を表示するには、オプション非正規検出モード (-check-subnormal)の既定値を変更します。チェックの結果は、指定した検証モードに応じて変化します。[allow] 以外のすべてのモードで非正規結果を特定するには、[非正規浮動小数点] チェックがレッドまたはオレンジになる演算を検索します。
| モード | チェックの色 | チェック後の動作 |
|---|---|---|
このモードでは、非正規値の出現が検出されます。このモードでは、結果が非正規になる実行パスが停止され、非正規値がそれ以上伝播しなくなります。したがって、実際には、最初に出現した非正規数のみが表示されます。 | チェックの色は、演算の結果のみに依存します。チェックでは、このような結果が非正規オペランドからのみ発生する場合でも、結果が非正規になる演算にフラグが付けられます。 たとえば、 | チェックはブロックされます。 チェックがレッドの場合、検証が停止されます。チェックがオレンジの場合、検証では非正規結果を含む実行パスが考慮対象から除外されます。たとえば、結果のツールヒントには非正規値が示されません。 |
このモードでは、非正規値の出現箇所がすべて強調表示されます。結果が非正規となった原因がそれ以前の非正規値にある場合でも、その結果が強調表示されます。 | チェックの色は、演算の結果のみに依存します。チェックでは、このような結果が非正規オペランドからのみ発生する場合でも、結果が非正規になる演算にフラグが付けられます。 たとえば、 | チェックはブロックされません。 チェックがレッドになっても、検証が続行されます。チェックがオレンジの場合、検証では非正規結果を含む実行パスは考慮対象から除外されません。 |
このモードでは、最初に出現した非正規値が強調表示されます。非正規値がそれ以降の演算結果に非正規値を伝播させている場合、このような後続の結果は強調表示されません。 | チェックの色は、演算結果とオペランド値に依存します。チェックでは、結果が非正規オペランドからのみ発生する場合には、結果が非正規になる演算にフラグが付けられません。 このモードのチェックは次のようになります。
| チェックはブロックされません。 チェックがレッドになっても、検証が続行されます。チェックがオレンジの場合、検証では非正規結果を含む実行パスは考慮対象から除外されません。 |
非正規のチェックを選択する場合、変数の範囲から非正規値が除外されるかどうかをツールヒントから特定することもできます。たとえば、ツールヒントによって [-1.0 .. -1.1754E-38] or [-0.0..0.0] or [1.1754E-38..1.0] と表示される場合、変数は非正規値にはならないと解釈できます。
例
結果情報
| グループ: 数値 |
| 言語: C | C++ |
| 頭字語: SUBNORMAL |
バージョン履歴
R2016b で導入