我仍然没有通过足够的测试来运行它,但是由于某种原因,使用某些非负值,这个函数有时会传回一个负值。我已经用不同的值在计算器中进行了很多手动测试,但我还没有让它显示相同的行为。
我想知道是否有人会看看我是否遗漏了什么。
float calcPop(int popRand1, int popRand2, int popRand3, float pERand, float pSRand)
{
return ((((((23000 * popRand1) * popRand2) * pERand) * pSRand) * popRand3) / 8);
}
变量都包含随机生成的值:
popRand1:在 1 到 30 之间
popRand2:在 10 到 30 之间
popRand3:在 50 到 100 之间
pSRand:1 到 1000 之间
pERand:在 1.0f 和 5500.0f 之间,然后乘以 0.001f,然后传递给上面的函数
编辑:
好吧,在更仔细地跟踪执行之后,这不是这个函数的直接错误。它会产生一个无限正的浮点数,然后当我稍后使用此代码时会翻转为负数:
pPMax = (int)pPStore;
pPStore 是一个浮点数,它保存 popCalc 的返回值。
所以现在的问题是,我如何阻止公式这样做?即使在计算器中使用非常高的值进行测试也从未显示过这种行为。编译器如何处理导致这种情况的操作顺序或者我的值只是太高了?