まだ十分なテストを実行していませんが、何らかの理由で、特定の負でない値を使用すると、この関数は負の値を返すことがあります。電卓でさまざまな値を使用して多くの手動テストを行いましたが、これと同じ動作を表示することはまだありません。
私が何かを見逃していないかどうか、誰かが見てくれるかどうか疑問に思っていました。
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 の戻り値を保持するフロートです。
問題は、数式がこれを行うのをどのように停止するかです。Calculator で非常に高い値を使用したテストでも、この動作が表示されたことはありません。コンパイラがこれを引き起こしている操作の順序を処理する方法に何かがありますか、それとも私の値が単に高すぎるだけですか?