我遇到了以下代码的问题:
#include<cmath>
using namespace std;
int main() {
setlocale(LC_ALL, "rus");
double b, x;
cout << "Введите значение b: ";
cin >> b;
double U;
for (x = 2; x <= 4; x += 0.2)
{
if (x < 3)
U = 2.75 * log(abs(b * x)) - sqrt(abs(log(x + b)));
else if (x == 3.)
U = x - 2. * sin(b / x);
else
U = exp(x) + log(x) - (10 * x);
cout << "x = " << x << endl;
cout << "U = " << U << endl << endl;
}
}
代码有效,但循环没有完成最后一次迭代。话虽如此,如果我执行以下构造,则代码可以正常工作:
for (x = 2; x <= 4;)
{
x += 0.2;
}
为什么 for 循环不进行最后一次迭代?
这里的问题是它
2 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2等于4.000000000000002,大于 4。因此,最后一次迭代被跳过。您可以在此处阅读更多内容:浮点数的计算无法正常工作
为了避免这种影响,必须削弱条件。例如,您可以半步离开让步:
或者您可以在比较之前尝试将 x 舍入到十分之一:
最后,最可靠的选择是以整数计数: