c# - 循环无法到达预期的端点
问题描述
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。但是当我仍然使用 <= 而不是 <
解决方案
这可能是由于具有双值的近似性质。double 类型是不精确的浮点值。双倍的 0.01 可能略高于 0.01。这里有一个很好的解释。
如果是这种情况,最后一次通过循环,角度值略大于 0.58,添加另一个略大于 0.01 的值将使其大于 0.59 并退出循环。
推荐阅读
- reach-router - 使用到达路由器路由到外部链路
- javascript - 事件如何冒泡到文档而不是 document.body?
- scala - Spark Scala:比较两个字符串中的单词的有效方法
- hyperledger-fabric - 在 Hyperledger Fabric Java 中获取信封读写集
- javascript - 从 VueJS 中的“内联模板”调用组件方法
- node.js - 带有 pm2 的 Nodejs Express 部署在本地主机之外
- azure-devops - 用于逻辑应用中 API 连接的 ARM 模板
- c# - 使窗口捕获的位图支持透明度
- c - 队列卡在循环中
- ios - 在后台一段时间后将应用程序带到前台时,iOS黑屏