web-dev-qa-db-fra.com

Grands nombres dans Java

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

J'ai essayé long mais cela ne dépasse pas 9223372036854775807, et lorsque vous utilisez un entier, il n'enregistre pas assez de chiffres et n'est donc pas assez précis pour ce dont j'ai besoin.

Y a-t-il un moyen de contourner cela?

86
Petey B

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

Exemple:

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

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

18
AlbertoPL

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(String... 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;
    }
}
15
Peter Lawrey

Commander BigDecimal et BigInteger.

12
Clint Miller
import Java.math.BigInteger;
import Java.util.*;
class A
{
    public static void main(String args[])
    {
        Scanner in=new Scanner(System.in);
        System.out.print("Enter The First Number= ");
        String a=in.next();
        System.out.print("Enter The Second Number= ");
        String b=in.next();

        BigInteger obj=new BigInteger(a);
        BigInteger obj1=new BigInteger(b);
        System.out.println("Sum="+obj.add(obj1));
    }
}
6
Rupendra Sharma

Selon ce que vous faites, vous voudrez peut-être jeter un coup d'œil à GMP (gmplib.org), une bibliothèque multi-précision hautes performances. Pour l'utiliser dans Java vous avez besoin d'encapsuleurs JNI autour de la bibliothèque binaire.

Voyez une partie du code Alioth Shootout pour un exemple d'utilisation à la place de BigInteger pour calculer Pi en un nombre arbitraire de chiffres.

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

3
Trevor Tippins