首页 > 解决方案 > 循环无法到达预期的端点

问题描述

double angle = .50, stop = .59;

Console.WriteLine("  Angle   Sine     Cosine");
while (angle <= stop)
{
    CalculateSineAndCosine(angle, out sine, out cosine);
    Console.WriteLine($"{angle,6:F}{sine,10:F4}{cosine,9:F4}");
    angle += .01;
}

最后一个循环只达到 0.58 而不是 0.59。无法理解发生了什么。请帮忙。PS 如果停止 = 0.60,它将达到 0.59。但是当我仍然使用 <= 而不是 <

标签: c#loopsfor-loopwhile-loopdo-while

解决方案


这可能是由于具有双值的近似性质。double 类型是不精确的浮点值。双倍的 0.01 可能略高于 0.01。这里有一个很好的解释

如果是这种情况,最后一次通过循环,角度值略大于 0.58,添加另一个略大于 0.01 的值将使其大于 0.59 并退出循环。


推荐阅读