【问题标题】:FOR loop iteration not workingFOR循环迭代不起作用
【发布时间】:2015-05-10 00:05:27
【问题描述】:

我只是想从 F​​OR 循环中获取输出,其中初始化值 i 被迭代了 3 次以上。

remainder = 0.33F;

for (float i = 0; i < 1.00F; i += remainder)
{
  Debug.Log(i);
}

这是给出输出,因为 i = 0、i = 0.33 和 i=0.66。为什么我没有得到 i = 0.99?

【问题讨论】:

  • 那么有什么方法可以让我得到变量'i'的所有期望值?
  • 我撤回了接近投票。一般来说,浮点数不准确会导致循环像这样失败。在这种情况下,余数 = 0.33,我认为这不可能发生。
  • 少量语法更正,但工作正常...dotnetfiddle.net/JsU2Yu
  • 我同意 Shar1er80,我也对其进行了测试,它工作正常,但由于 fp 不准确,如果 remainder = 1.0f/3.0f 无法打印 0.99。
  • for (int idx = 0; idx &lt; 3; idx++) { float i = remainder * idx / 3.0f; ... }

标签: c# for-loop unity3d


【解决方案1】:

Because float point arithmetic isn't precise, and shouldn't expected to be.

对这个特定问题的准确解释将包括如何将浮点数存储在 C# VM 中的内存中的详细信息,以及 Microsoft 的编译器和 Mono 的编译器之间的差异,以及如果你在 iOS 上构建,你会如何获得不同的结果,之前和在 IL2CPP 之后。

但是,我认为您不需要所有这些信息,老实说,我懒得深入挖掘。根据一般经验法则,依赖浮点运算是不可靠且不精确的。

【讨论】:

    猜你喜欢
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2017-07-05
    • 2021-08-18
    • 2012-01-05
    • 2021-04-27
    相关资源
    最近更新 更多