避免在 for 循环中使用浮点数¶
ID: cpp/loop-variable-float
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- correctness
- reliability
- external/jsf
Query suites:
- cpp-security-and-quality.qls
此规则查找将 float
变量用作循环计数器的情况。 float
值容易出现舍入和截断问题。 尤其是,非常大或非常小的浮点数容易出现舍入误差,从而导致循环行为异常。
建议¶
使用整型变量代替浮点数作为循环计数器。
示例¶
void f() {
float i = 0.0f;
//wrong: float used as loop counter
for (i = 0; i < 1000000.0f; i++) { //may execute 1000000 +x/-x times
//...
}
for (i = 0; i < 100000000.0f; i++) { //may never terminate, as rounding errors
//cancel out the addition of 1.0 once
//i becomes large enough
//...
}
}
参考资料¶
AV 规则 197,联合攻击战斗机空中飞行器 C++ 编码标准。洛克希德·马丁公司,2005 年。
MISRA C++ 规则 6-5-1,关键系统中使用 C++ 语言的指南。汽车行业软件可靠性协会,2008 年。