AUTOSAR C++14 Rule M6-2-2
Floating-point expressions shall not be directly or indirectly tested for equality or inequality.
説明
ルール定義
Floating-point expressions shall not be directly or indirectly tested for equality or inequality.
根拠
浮動小数点数では丸め誤差が生じるため、浮動小数点数が等価であることを正確に比較する方法がありません。これは、等価性の直接的なテストの場合も間接的なテストの場合も同様です。浮動小数点数の比較で等価であることが予期される場合、誤った結果となる可能性があります。この動作は予測不能であり、実装に応じて異なる可能性があります。
等価比較での浮動小数点数の使用を避けてください。あるいは、比較演算を実装するライブラリを作成します。このライブラリの作成時には、比較する数値の大きさと、浮動小数点の粒度を考慮してください。
Polyspace 実装
ルール チェッカーは、浮動小数点型の変数または式での == または != の使用を検出します。また、ルール チェッカーは浮動小数点型の変数の等価性または非等価性の間接テストも検出します。以下に例を示します。
float x, y = 0.0;
if ((x < y) || (x > y)) //Noncompliant
{
//...
}
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: ステートメント |
| カテゴリ: Required、Partially automated |
バージョン履歴
R2019a で導入