我在Unity的一个C#函数中发现了令人惊讶的行为。传递给我的函数的float在其中包含一个非常值。
我知道浮点数在与具有大量小数的数字一起使用时会变得奇怪,但在这种情况下它只发生在函数内部。我也试过双打,结果很相似。
private float i = 0;
private float whatever1 = Random.Range(1f, 10f);//Some value in 1-10 range
private float whatever2 = Random.Range(1f, 10f);//Some value in 1-10 range
private float MyFunc(float j)
{
Debug.Log(j.ToString());
float max = whatever1 > whatever2 ? whatever1 : whatever2;
return j - max;
}
public void Update(){
i += Random.Range(1/60f, 1/50f);
}
public void Test(){
Debug.Log(i);
MyFunc(i);
MyFunc(67f);
}
// 10.256463
// 4,622506E+18
// 4,622506E+18
所以我尝试调试并记录i
和j
的值。它的值在MyFunc
之外是正确的,但只要它进入函数就会变成奇怪的4.16E+18
。
到目前为止,我已尝试过几件事:
Mathf.Max
代替三元运算符double
s代替花车MyFunc(67)
)结果:
对于9-15范围内的值
i
,j
的值介于4,0E + 18和6之间,.0E + 18j
在MyFunc
对浮点数进行任何操作之前采用了奇怪的值。所以它似乎与浮点运算问题无关。
我最终在任何我需要的地方内容都列出了该功能的内容,但我仍然不明白会发生什么。你能解释一下吗?