循环无法达到预期的终点

时间:2019-11-26 00:18:09

标签: c# loops for-loop while-loop do-while

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。无法理解发生了什么。请帮忙。 附言如果止损= 0.60,它将达到0.59。但这发生在我仍然使用<=而不是<< / p>时

2 个答案:

答案 0 :(得分:0)

这可能是由于具有双值的近似性质。 double类型是不精确的浮点值。 0.01的两倍可能略大于0.01。 There is an excellent explanation here

如果是这种情况,那么最后一次通过循环时,角度值会稍微大于0.58,再加上一个稍大于0.01的角度值将使其大于0.59并退出循环。

答案 1 :(得分:0)

详细了解相等性检查。在您的情况下,情况差不多。

floating point numbers equality checking