【发布时间】:2015-07-24 20:15:40
【问题描述】:
在下面的代码中,为什么要与float.Epsilon进行比较而不是0?
// Coroutine to move elements
protected IEnumerator SmoothMovement (Vector3 end)
{
// Distance computation
float sqrRemainingDistance = (transform.position - end).sqrMagnitude;
while(sqrRemainingDistance > float.Epsilon)
{
Vector3 newPostion = Vector3.MoveTowards(
rb2D.position, end, inverseMoveTime * Time.deltaTime
);
rb2D.MovePosition (newPostion);
sqrRemainingDistance = (transform.position - end).sqrMagnitude;
yield return null;
}
}
【问题讨论】:
-
因为
float.Epsilon不是0。en.wikipedia.org/wiki/Machine_epsilon -
要么没必要要么不正确。如果作者试图避免舍入错误,那么
float.Epsilon通常是一个太小而无法使用的值。如果他们没有尝试避免舍入错误,那么他们正在做一些非常奇怪的事情(这也可能是不正确的)或不必要的。 -
为什么这被否决了?对我来说似乎是一个合法的问题。
-
我在看“Unity 2D Roguelike”教程,也想知道“float.Epsilon”,刚刚发现了同样的代码:)
标签: c# unity3d floating-accuracy