Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Méthodes de calculs sur des grands nombres

Posté par
jamo Moderateur
11-04-11 à 15:06

Bonjour tout le monde,

il m'arrive parfois de tomber sur certains problèmes ou énigmes mathématiques qui demandent de manipuler et de faire des opérations sur des grands nombres (des nombres avec plusieurs dizaines de chiffres).

Pour ma part, j'utilise le langage C pour réaliser mes petits programmes, mais celui-ci ne peut aller que jusqu'à des nombres entiers d'un peu plus de 4 milliards (unsigned long int).
Je sais qu'il existe les formats pour nombres décimaux qui vont bien au-delà, mais on ne peut plus rester précis et faire des calculs exacts.

Je sais aussi qu'il existe des langages qui gèrent les grands nombres, mais j'ai envie de rester en C.

Je me suis donc dit que j'allais me créer quelques fonctions pour gérer ces grands nombres stockés dans des tableaux.
Il me faut donc des fonctions pour additionner, soustraire, multiplier, diviser, comparer, ... puis d'autres par la suite si nécessaire.

Je sais qu'on doit aussi trouver des bibliothèques de telles fonctions déjà toutes faites, mais pour le plaisir, j'ai envie de les programmer par moi-même.

J'en viens à ma question.

Qui aurait des informations ou un lien vers un document clair et concis pour aider à la réalisation de telles fonctions ?
Je suppose qu'il existe des méthodes assez bien pensées pour s'organiser avec les grands nombres, et j'aimerais m'en inspirer pour gagner un peu de temps et faire des choses assez propres.

Posté par
patrice rabiller
re : Méthodes de calculs sur des grands nombres 11-04-11 à 18:21

Bonjour Jamo,

J'ai déjà fait ça aussi il y a longtemps mais je ne retrouve plus mes sources
Pour ma part j'avais dû le faire en Delphi avec des tableaux. Le plus dur sera de réaliser la division (mais déjà, la multiplication c'est assez coton). De mémoire j'avais utilisé tout simplement les algorithmes "manuels" pour faire les 4 opérations.

Je viens de regarder dans Delphi et je m'aperçois que Delphi4 (déjà) sait gérer des nombres entiers sur 64 bits signés (de -263 à 263-1) ce qui est bien au delà des 4 milliards ... Tu es sûr que le langage C ne peut pas faire mieux que ça ?

Posté par
jamo Moderateur
re : Méthodes de calculs sur des grands nombres 12-04-11 à 09:13

En C standard, le type d'entier le plus long est le "unsigned long int".

Je crois en effet qu'il existe aussi le type "long long", de 64 bits, qui peut donc aller jusque 264 en non signé, mais ça reste un nombre à environ 20 chiffres.

C'est pour cela qu'on est bien obligé de créer ses propres fonctions pour des nombres de plus de 20 chiffres.

Moi aussi, j'ai déjà pensé à programmer les méthodes "comme à la main", mais je me demandais s'il n'existais pas des techniques particulières, à partir de la multiplication ou pour la division.

Car il me semble qu'il existe des méthodes qui consistent à découper un grand nombre en blocs de nombres plus petits, de faire les opérations classiques sur ces petits nombres, puis de remettre les blocs en place avec quelques opérations.
Il se pourrait que cette méthode de découpage soit plus optimale au niveau temps de calcul.

Posté par
infophile
re : Méthodes de calculs sur des grands nombres 12-04-11 à 18:58

Citation :
Car il me semble qu'il existe des méthodes qui consistent à découper un grand nombre en blocs de nombres plus petits, de faire les opérations classiques sur ces petits nombres, puis de remettre les blocs en place avec quelques opérations.


Il te semble bien

On appelle ça des "big int" chez nous, GETA!

Posté par
jamo Moderateur
re : Méthodes de calculs sur des grands nombres 10-07-11 à 11:00

Après quelques mois, je me penche à nouveau sur ce problème, et j'ai trouvé une solution.

J'ai décidé d'utiliser la bibliothèque libre GMP :
Cette bibliothèque semble plutôt performante puisqu'elle est utilisée dans les logiciels Maple et Mathematica.
Elle contient tous les types de données et les fonctions permettant de travailler avec de très grands entiers, mais aussi sur des fractions et des réels en grande précision.
Tout cela est sous la forme d'une librairie utilisable en C (mais aussi en C++), ce qui est exactement ce que je voulais (pour information, je fais mes programme en C sous l'environnement CodeBlocks )

J'ai un peu sué pour l'installation car le site de GMP ne donne que l'ensemble des fichiers sources (en C), et il faut compiler l'ensemble de manière un peu pénible quand on n'est pas doué en informatique.
Heureusement que j'ai trouvé un petit tutoriel pour cette manipulation :

Voilà, je pense que je vais pouvoir travailler avec cette bibliothèque qui contient vraiment tout ce qu'il faut ! (en particulier, ceux qui sont intéressés par les méthodes de cryptage de type RSA y trouveront leur bonheur)



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !