我的问题与此有关 如何检查Java中的两个数字相乘是否会导致溢出?
在我的应用程序中,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%的误差是可以接受的,如果这会带来巨大的性能提升。