☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

for 循环变量不应为浮点型

9.2.6 ID_for_floatCounter
目录 › next › previous

用于控制循环次数的变量称为“循环变量”,这种变量不应采用浮点类型,否则循环的次数难以控制。

由于浮点型变量的不精确性使浮点型变量不适用于控制循环次数,参见 ID_illFloatComparison。

示例:

size_t n = 0;
for (float f = 0.f; f < 1.f; f += 0.001f) {  // Non-compliant
    ....
    n++;
}
cout << n << '\n';  // Not 1000

本例按常识应循环 1000 次,然而由于 f 无法精确表示 0.001,导致实际循环次数与预期产生偏差。

可变通地建立整型循环变量与浮点数的关系:

for (size_t n = 0; n < 1000; n++) {  // Compliant
    float f = n * 0.001f;
    ....
}

这样循环的次数便与预期相符。

相关

ID_illFloatComparison ID_for_invalidCounter

参考

MISRA C 2004 13.4 MISRA C 2012 14.1 MISRA C++ 2008 6-5-1 SEI CERT FLP30-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.