float传递给方法

时间:2017-04-24 14:38:02

标签: c# unity3d mono

我在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

所以我尝试调试并记录ij的值。它的值在MyFunc之外是正确的,但只要它进入函数就会变成奇怪的4.16E+18

到目前为止,我已尝试过几件事:

  • 使用Mathf.Max代替三元运算符
  • 使用double s代替花车
  • 将常量传递给函数而不是值(请参阅MyFunc(67)
  • 重建解决方案/项目

结果:

  

对于9-15范围内的值ij的值介于4,0E + 18和6之间,.0E + 18   jMyFunc对浮点数进行任何操作之前采用了奇怪的值。所以它似乎与浮点运算问题无关。

我最终在任何我需要的地方内容都列出了该功能的内容,但我仍然不明白会发生什么。你能解释一下吗?

0 个答案:

没有答案