4 votes

Quel langage de programmation me permettra de saisir un très long nombre sans le convertir en virgule flottante ?

Quelle serait la meilleure façon de faire ce qui suit.

Entrer un très long nombre, disons 500 000 chiffres, sans qu'il entre dans la notation scientifique, et être ensuite capable de faire des maths avec, comme +2, etc.

Merci d'avance.

EDIT : C'est un nombre entier positif de 500 000 chiffres.

13voto

arul Points 10719

Python y Java ont un support natif, des bibliothèques existent pour C++ , C , .NET , ...

11voto

jldupont Points 31331

Je sais qu'Erlang prend en charge les int arithmétiques de taille illimitée.

6voto

Omnifarious Points 25666

Python le fait d'emblée, sans bibliothèque spéciale. Il en va de même pour 'bc' (qui est un langage de programmation complet se faisant passer pour une calculatrice) pour les systèmes Unix.

6voto

Alex Martelli Points 330805

Python est assez bon tout seul, mais meilleur avec gmpy (qui fait le lien avec la bibliothèque GMP que d'autres ont mentionnée, ou alternativement avec la bibliothèque MPIR qui est un peu comme un travail [[travail en cours;-)]]). Pensez-y :

$ python -mtimeit -s'x=int("1"*9999); y=int("2"*9999)' 'x*y'
100 loops, best of 3: 6.46 msec per loop

Par exemple, en Python pur, la multiplication de deux ints de 10K chiffres prend environ 6,5 millisecondes. Et.. :

$ python -mtimeit -s'from gmpy import mpz; x=mpz("1"*9999); y=mpz("2"*9999)' 'x*y'
1000 loops, best of 3: 326 usec per loop

...avec gmpy à portée de main, l'opération sera environ 20 fois plus rapide. Si vous avez des centaines plutôt que des milliers de chiffres, c'est encore plus extrême :

$ python -mtimeit -s'x=int("1"*199999); y=int("2"*199999)' 'x*y'
10 loops, best of 3: 675 msec per loop

vs

$ python -mtimeit -s'from gmpy import mpz; x=mpz("1"*199999); y=mpz("2"*199999)' 'x*y'
100 loops, best of 3: 17.8 msec per loop

Ainsi, avec 200 000 chiffres au lieu de 10 000, l'avantage de vitesse de GMPY est de 38 fois environ.

Si vous avez régulièrement besoin de manipuler des entiers de cette ampleur, Python + gmpy est vraiment une solution viable (bien sûr, je suis partial, puisque j'ai écrit et soigné gmpy ces dernières années exactement parce que je ♥ Python (hé, mon plaque d'immatriculation est P♥thon!-) et dans un de mes hobby (l'arithmétique combinatoire) j'ai faire ont à faire avec de tels chiffres assez souvent;-).

4voto

Heath Hunnicutt Points 9801

Mathematica vous permet d'effectuer ce genre de calculs et vous pouvez y écrire des programmes complets.

Sinon, ce que vous recherchez, c'est une "bibliothèque" permettant d'étendre les fonctionnalités intégrées d'un autre langage de programmation, tel que Python ou Java.

Dans le cas de Python, le module décimal vous permet de spécifier la précision avec laquelle les opérations mathématiques seront effectuées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X