首页 > 解决方案 > 此 for 循环的第 11 次迭代中的问题:“for (float x = -1; x < 1.1f; x += 0.1f)”

问题描述

我试图沿着 unit[-1, +1] 水平线以 0.1 的间隔生成一些点。这是代码。

for (float x = -1; x < 1.1f; x += 0.1f)
{
    line.points.push_back(Point(x, 0.5f, x * 1.0f));
}

当我后来试图画出这些点时,

for (size_t i = 1; i < tLine.points.size(); i++) 
{
    std::cout << "drawing" << '\n';
    DrawLine(
        (int32_t)tLine.points[i].x,
        (int32_t)tLine.points[i].y,
        (int32_t)tLine.points[i - 1].x,
        (int32_t)tLine.points[i - 1].y,
        olc::BLACK);
}

我注意到打印在控制台上的“绘图”在程序冻结 11 次迭代后停止。经过一番调试,我发现问题出在第一个for循环生成点上。当我打印出x那个 for 循环的值时,它给了我

-1
-0.9
-0.8
-0.7
-0.6
-0.5
-0.4
-0.3
-0.2
-0.0999999
7.45058e-08 // ???
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1

如您所见,应该为 0 的值是一些无意义的值。之前的那个也差了一点。

在那个 for 循环中,0.1被添加到-0.09999997.45058e-08. 我还手动尝试添加相同的两个数字,但它给出了1.04308e-07(我希望它给出 0)。发生了什么事,我该如何解决这个问题?谢谢。

标签: c++

解决方案


推荐阅读