应该为0的简单算术微积分返回无穷大

时间:2014-12-06 03:31:29

标签: macos math unity3d mono monodevelop

所以......如果它们相等,我必须检查一些值。但他们从来没有,我知道他们应该,我调试了我的申请并得出了以下结论

-2.5f - Mathf.Round(1.1f)* 0.6f - (-3.1f)doest不等于0但是它的值是-1.192093E-07

对此有合理的解释并且有解决方法吗?我真的需要这种格式的等式。

PS:所有值都在这里硬编码,但它们是变量,它们也有其他值。问题是结果应为0

这是一行代码: Debug.Log(string.Format(" {0}", - 2.5f - Mathf.Round(1.1f)* 0.6f - (-3.1f)));

在OS X 10.9.5上使用Unity 4.5.1f3和Monodevelop 4.0.1。

1 个答案:

答案 0 :(得分:1)

如评论中所述-1.192093E-07不是无穷大,它非常接近于零。注意" E"之后的减号。值为.0000001192093

当您比较浮点数时,不应使用==,因为浮点运算会导致这种小错误。相反,你可以使用这样的东西:

float diff = aValue - bValue;
if(diff < 0.000001f && diff > -0.000001f){

}

阅读&#34;每个程序员应该了解浮点运算&#34;这可能是个好主意。例如here