Je multipliant le 2
très grand nombre en java, mais la sortie se multiplient semble être peu étrange
codeMultipliant Grand nombre en 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);
Sortie:
-6642854965492867616
2003764205206896640
Dans le premier cas pourquoi le résultat est négatif, si c'est à cause du débordement alors comment se fait-il que le résultat de la seconde est positif? S'il vous plaît expliquer ce comportement? Code
Edit:
J'utilise mod=100000000009
encore l'opération il est négatif?
a = ((a%mod)*(b%mod))%mod
Cela peut être dû à une troncature, car le résultat ne peut pas être stocké dans un 'long'. Si "long" ne suffit pas. Essayez d'utiliser 'BigInteger' –
@ redflar3 ce n'est pas un problème, le principal problème est de savoir pourquoi« négatif »sur le premier cas alors que« positif »sur le deuxième cas –
peut supporter jusqu'à (2^63-1 qui est 9e18) où le le résultat de votre première multiplication dépasse 1e20. cela provoque une troncature, donc le résultat n'est pas correct. De même, le second résultat est également tronqué, car il devrait être 1e24. par conséquent utiliser BigInteger –