Grands nombres en Java

Comment pourrais-je faire des calculs avec des nombres extrêmement importants en Java?

J’ai essayé long mais au maximum, au 9223372036854775807, et quand on utilise un nombre entier, il ne sauvegarde pas assez de chiffres et n’est donc pas assez précis pour ce dont j’ai besoin.

Y a-t-il de toute façon autour de cela?

Vous pouvez utiliser la classe BigInteger pour les entiers et BigDecimal pour les nombres avec des chiffres décimaux. Les deux classes sont définies dans le package java.math .

Exemple:

 BigInteger reallyBig = new BigInteger("1234567890123456890"); BigInteger notSoBig = new BigInteger("2743561234"); reallyBig = reallyBig.add(notSoBig); 

Utilisez la classe BigInteger qui fait partie de la bibliothèque Java.

http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html

Voici un exemple qui obtient de grands nombres très rapidement.

 import java.math.BigInteger; /* 250000th fib # is: 36356117010939561826426 .... 10243516470957309231046875 Time to compute: 3.5 seconds. 1000000th fib # is: 1953282128707757731632 .... 93411568996526838242546875 Time to compute: 58.1 seconds. */ public class Main { public static void main(Ssortingng... args) { int place = args.length > 0 ? Integer.parseInt(args[0]) : 250 * 1000; long start = System.nanoTime(); BigInteger fibNumber = fib(place); long time = System.nanoTime() - start; System.out.println(place + "th fib # is: " + fibNumber); System.out.printf("Time to compute: %5.1f seconds.%n", time / 1.0e9); } private static BigInteger fib(int place) { BigInteger a = new BigInteger("0"); BigInteger b = new BigInteger("1"); while (place-- > 1) { BigInteger t = b; b = a.add(b); a = t; } return b; } } 

Checkout BigDecimal et BigInteger .

 import java.math.BigInteger; import java.util.*; class A { public static void main(Ssortingng args[]) { Scanner in=new Scanner(System.in); System.out.print("Enter The First Number= "); Ssortingng a=in.next(); System.out.print("Enter The Second Number= "); Ssortingng b=in.next(); BigInteger obj=new BigInteger(a); BigInteger obj1=new BigInteger(b); System.out.println("Sum="+obj.add(obj1)); } } 

Selon ce que vous faites, vous voudrez peut-être consulter GMP (gmplib.org), une bibliothèque multi-précision à haute performance. Pour l’utiliser en Java, vous devez utiliser des wrappers JNI autour de la bibliothèque binary.

Voir un peu du code Alioth Shootout pour un exemple de son utilisation au lieu de BigInteger pour calculer Pi à un nombre arbitraire de chiffres.

https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/pidigits-java-2.html

En utilisant le type de données chaîne, vous résolvez facilement ce problème.

 class Account{ Ssortingng acc_no; Ssortingng name;