MISRA C:2012 Rule 14.1
A loop counter shall not have essentially floating type
説明
ルール定義
A loop counter shall not have essentially floating type 1 .
根拠
浮動小数点ループ カウンターを使用すると、丸め誤差が累積されて、実際の反復回数が期待される回数と異なってくる可能性があります。この丸め誤差は、浮動小数点の基数のべき乗ではないループ ステップを浮動小数点で表現される値に丸める場合に発生します。
浮動小数点ループ カウンターを含むループが、ある実装では正常に動作しているようでも別の実装では異なる反復回数を示す可能性があります。
Polyspace 実装
ループ カウンター変数が実質的な浮動小数点型の場合、Polyspace® はこのルールの違反を報告します。
変数がループ カウンターであるかどうかを判断するために、チェッカーはループの制御式のみを考慮します。特に以下に注意してください。
ループを中断するために浮動小数点変数が使用されていても、この変数がループ制御式で使用されていない場合、Polyspace はこの変数をループ カウンターと見なしません。たとえば、以下の例では
float型の変数loopBreakerはループ カウンターと見なされず、ループを中断するためにこの変数を使用することは、このルールに対する違反になりません。float loopBreaker = 0.0f; /* No violation raised */ while(1) { if(loopBreaker > 5.0f) break; loopBreaker += 1.0f; }変数がループ カウンターであるかどうかを判断する際に、Polyspace は、その変数がループの存続期間中に単調に変化するかどうかや、変数がループの各ステップで変わるかどうかはチェックしません。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: 制御ステートメントの式 |
| カテゴリ: 必要 |
| AGC カテゴリ: 推奨 |
バージョン履歴
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.