Comment changer la taille max d'un int en C ?
Pip Iiic
Messages postés
64
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je programme en C. Le problème étant que les valeurs utilisées dans mon programme sont trop grandes pour utiliser un int, voire plus.
Voilà pourquoi je souhaiterais augmenter la taille maximale d'un int.
Voudriez-vous bien m'expliquer les étapes à suivre ?
Cordialement, Pip.
Je programme en C. Le problème étant que les valeurs utilisées dans mon programme sont trop grandes pour utiliser un int, voire plus.
Voilà pourquoi je souhaiterais augmenter la taille maximale d'un int.
Voudriez-vous bien m'expliquer les étapes à suivre ?
Cordialement, Pip.
7 réponses
-
Bonjour,
Tu ne peux pas modifier la taille du type int.
Tu ne pourra pas faire de calculs facilement avec des types plus grands que des long double. Il te faudra mettre au point un alogorithme qui fait les calculs par blocs (par petit bout de mémoire). Tu peux éventuellement faire une structure.
Sinon tu peux utiliser des bibliothèques spécialisées dans le traitement des grands nombres (des bibliothèques de maths). Je pense notamment à GMP qui t'aidera peut-être.-
Juste ce qu'il me fallait. Malheureusement, je n'arrive pas à l'installer sur Windows.
J'ai suivi le tutoriel :
https://openclassrooms.com/fr/courses -
Le plus simple est surement d'installer VirtualBox pour faire tourner Linux et y installer GMP
Sous Ubuntu avec la commande sudo apt-get install libgmp3-dev -
Pour ceux que ça intéresse, je l'ai téléchargé ici et extrait avec Universal extractor :
https://packages.debian.org/squeeze/libgmp3-dev
J'ai ensuite placé les fichiers dans les dossiers respectifs de Dev-cpp. -
Tant de difficultés ; après avoir essayé d'installer GMP sous Windows, sué sang et eau pendant 3 jours, inclus les headers dans main.c, on me signale que je dois entièrement réécrire mon programme afin qu'il soit compatible avec cette nouvelle bibliothèque, qui de plus, cause des conflits avec math.h. Tant pis, je m'arrêterai à 2147483647.
-
Tu ne pensais quand même pas que tout allait se faire tout seul ?
GMP est une bibliothèque qui utilise des grand nombres mpz_t et fournit toutes les méthodes de calcul que tu pourrais trouvées dans math.h, la réécriture ne devrait pas être trop compliquée...
Remarque : te limiter à des int est quand même radical, et pourquoi pas des short ^^
Avec les unsigned long long tu peux aller jusqu'à 18 446 744 073 709 551 615, c'est déja un début...
-
-
Bonjour
Le int fait entre 16 et 32 bits
Tu as donc aussi
le "long" entre 32 et 64 bits
le "long long" qui lui fait 64 bits
Svp
-
Même avec un long double, voire plus, cela ne suffit pas. Je ne peux pas changer la taille maximale d'un int ?
-
ce sont des primitives ... tu ne peux rien y changer.
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
ceci dit, jusqu'à quelle valeur "titanesque" tu dois aller ?
-
-
Alors l'utilisation de GMP parait adapté comme disait Antoine
-
remarque tout de même que ce nombre est bien plus énorme que toute mémoire décente d'un ordinateur (qui vaut environ 2 ou 4 * 10^9 octets.... )
même en compressant ton nombre, je vois vraiment mal comment tu arriveras à stocker la valeur exacte. Même en regroupant toutes les RAM et les DD de la terre, je ne suis pas sûr que tu y arrives, sans compter le temps de parcourir ce nombre par le processeur.
en conséquence, il est illusoire, même avec une bibliothèque externe, de manipuler des nombres entiers exacts comme ceci.
C'est bien pour cela que la recherche de gros nombres premiers est difficile, et sapparent plus à un travail de mathématicien qu'à de "juste de la prorgammation et hop on met dans la machine". -
-
-
suis donc les conseils d'antoine alors...