Я умножаю 2
очень большое число в java, но результат умножения кажется немного странным
Код
long a = 2539586720l;
long b = 77284752003l;
a*=b;
System.out.println(a);
a=(long)1e12;
b=(long)1e12;
a*=b;
System.out.println(a);
Вывод:
-6642854965492867616
2003764205206896640
В первом случае, почему результат отрицательный, если это из-за переполнения, то почему во втором случае результат положительный? Пожалуйста, объясните это поведение? Код
Edit:
Я использую операцию mod=100000000009
, но результат отрицательный?
a = ((a%mod)*(b%mod))%mod
long
. Еслиlong
недостаточно. Попробуйте использоватьBigInteger
- person Jos   schedule 10.01.2017negative
в первом случае, аpositive
во втором случае - person Narendra Modi   schedule 10.01.2017-ve
для обоих - person Narendra Modi   schedule 10.01.2017integer multiplication overflows
- person Jos   schedule 10.01.2017