【发布时间】:2013-06-27 12:55:00
【问题描述】:
我仍然没有通过足够的测试运行它,但是由于某种原因,使用某些非负值,这个函数有时会传回一个负值。我已经在计算器中使用不同的值进行了很多手动测试,但我还没有让它显示相同的行为。
我想知道是否有人会看看我是否遗漏了什么。
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 的返回值。
所以现在的问题是,我如何阻止公式这样做?即使在计算器中使用非常高的值进行测试也从未显示过这种行为。编译器如何处理导致这种情况的操作顺序或者我的值只是太高了?
【问题讨论】:
-
我的猜测是你溢出了,这意味着值太大了,由于它在内存中的表示方式,它变成了负数。
-
什么是产生负输出的输入示例?
-
请注意,只有整数溢出才会导致否定结果。浮点溢出将导致正无穷大。 int 的大小是多少?
-
@Borgleader 这似乎是正在发生的事情。浮点数变为无限正数,当我稍后将其转换为 int 时会产生负值。
-
所以问题出在你没有发布的代码上?如果是这样,请发布问题代码,以便我们为您提供适当的帮助。
标签: c++ function floating-point return negative-number