【发布时间】:2011-09-23 19:27:09
【问题描述】:
在我的示例中,X 已经很长,Y 也很长。那时我不投。
我真的只想除以一个立方数。 (使用原生库)
这些数字非常大。如果我将它们转换为浮点数并执行此操作,则其值为 Infinite...
System.out.println(formatter.format("%20d", (X/(Y*Y*Y))));
Y 是一个非常大的数字,它不是 0。X 是以毫秒为单位的时间度量。
如果这个问题没有关闭,我将在短时间内发布确切的代码......我现在无法访问它。
上下文:我正在处理 O(n^3) 的大符号计算。
错误:“线程“主”java.lang.ArithmeticException 中的异常:/ 为零”
答案:
假设您不是真的要引用引号,可能的原因是 Y * Y * Y 大于 2 ^ 31。溢出,下半部分 0。我相信只有当 Y 是 2^11 的倍数时才会发生这种情况 (2048) - 但我不确定*
-对我来说就是这种情况,Y 是 2048 的倍数,希望这有助于尝试找到解决方案。
// Algorithm 3
for( int n = 524288; n <= 5000000; n *= 2 ){
int alg = 3;
long timing;
maxSum = maxSubSum3( a );
timing = getTimingInfo( n, alg );
System.out.println(fmt.format("%20s %20d %20d %20d %20d %20s%n", "Alg. 3", n, timing, timing, timing/(n*n), "time/(n*log(n))"));
}
【问题讨论】:
-
请贴出代码。
-
大概是因为
Y是零吧?如果是这样的话,那么再乘以它本身也不会改变这个事实。 -
阅读 BigDecimal 的 api 文档。
-
@KRB,您发布的代码可能无法编译(请注意,您使用了字符串文字:
"(X/(Y*Y*Y))",而不是数字)。人们在索要代码时向您提出的要求是,您发布的代码是否足够人们可以在他们自己的 PC 上运行的代码,以准确显示您遇到的问题。请问可以发这样的sn-p吗? -
可能是一个红鲱鱼,但我不得不问:你真的得到一个错误,比如“线程“主”java.lang.ArithmeticException:/零”之类的错误,还是你得到0 作为答案?如果 YYY > X,那么 0 将是预期的答案,因为这是整数除法。
标签: java math divide-by-zero