私の質問はこれに関連してい ますJavaで2つの数値を乗算するとオーバーフローが発生するかどうかを確認するにはどうすればよいですか?
私のアプリケーションでは、x と y はオンザフライで計算され、式のどこかで x と y を乗算する必要があります。
int x=64371;
int y=64635;
System.out.println((x*y));
次のように間違った出力が得られます-134347711
上記の変数x
とy
型int
を変更することlong
で、上記のケースの正しい答えをすばやく修正できます。ただし、最大容量を超えて拡張されないという保証はx
ありません。y
long
質問
最終結果をどの変数にも格納していないのに、ここで負の数が得られるのはなぜですか? (好奇心のため)
x と y の値が事前にわからないため、このオーバーフローを回避するより迅速な方法はありますか。アプリケーションの実行全体に対して、すべての x と y を特定の大きな定数で
log
除算するか、乗算する前に x と y を取得する必要がありますか? (実際の質問)
編集:
明確化
アプリケーションはビッグ データ セットで実行され、完了するまでに数時間かかります。遅すぎない解決策があるとよいでしょう。
最終結果は比較に使用されるため (元の結果にある程度比例する必要があるだけです)、パフォーマンスが大幅に向上する場合は、最終値に+-5% の誤差があっても許容されます。