【问题标题】:How do I prevent dividing by zero in a for loop evaluation?如何防止在 for 循环评估中除以零?
【发布时间】:2020-05-14 16:01:09
【问题描述】:

在这段代码中

for (int i = 0; i < 1 / timeScale; i++)
 {
       ......
 }

在执行此循环期间,变量 timescale 有可能变为零。 如何防止循环评估 1/timeScale 并出现 1/0 时出现的错误?

【问题讨论】:

  • 0 时你希望做什么?如果你想停止,你可以先检查那个条件。
  • 保持循环无限运行直到它不再为零
  • 我认为for 是错误的循环,无论你在做什么。 for 用于进入循环之前知道它的执行频率的情况。既然你说timeScale 可以变成 0,那么你确实知道你必须多久循环一次。也许尝试一段时间。例如while(timeScale != 0)
  • 我需要将其与 i 进行比较,而 (i
  • 如果您想在timeScale0 时保持运行,请将检查更改为timeScale == 0 || i &lt; 1 / timeScale 如果您想停止迭代,则将其设置为timeScale != 0 &amp;&amp; i &lt; 1 / timeScale 表示很难给出好的结果在无法看到 for 循环中实际发生的情况的情况下提出建议。

标签: c# loops for-loop logic division


【解决方案1】:

让循环无限运行直到它不再为零

在这种情况下,应该这样做:

for (int i = 0; timeScale < 0.00001 || i < 1 / timeScale; i++)
{
    // ......
}

【讨论】:

  • 您能否详细说明为什么您不检查timeScale == 0?为什么是 0.00001?
  • 半有效点 - 不应该只在除以 完全 零时发生除以零错误,而不是在除以 几乎 时发生i> 零?
  • 如果你接近于 0,那么除法将接近无穷大并且无论如何都会通过 - 分裂头发。
  • 我应该在循环中添加if (i &lt; 0) { i = 0; },以防我在循环期间翻转为负数?
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 2021-07-01
  • 2011-12-17
  • 1970-01-01
  • 2012-08-30
相关资源
最近更新 更多