В моем примере X уже длинный, а Y длинный. Я не нахожусь в то время.
Я действительно просто хочу разделить на число в кубе. (используя нативные библиотеки)
Эти цифры чрезвычайно велики. Если я преобразую их в числа с плавающей точкой и сделаю это, его значение будет бесконечным ...
System.out.println(formatter.format("%20d", (X/(Y*Y*Y))));
Y - чрезвычайно большое число, а не 0. X - это измерение времени в миллисекундах.
Я скоро опубликую точный код, если этот вопрос не закроется ... У меня нет доступа к нему прямо сейчас.
Контекст: Я имею дело с вычислением больших обозначений для O (n ^ 3).
Ошибка:"Исключение в потоке" main "java.lang.ArithmeticException: / by zero"
Ответы:
Предполагая, что вы не имели в виду кавычки, вероятная причина в том, что
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))"));
}