Comment changer la taille max d'un int en C ?

Pip Iiic Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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.
A voir également:

7 réponses

Antoine
 
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.
3
Pip Iiic Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   18
 
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
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
0
Pip Iiic Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   18
 
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.
0
Pip Iiic Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   18
 
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.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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...
0
choubaka Messages postés 39442 Date d'inscription   Statut Modérateur Dernière intervention   2 105
 
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
0
Pip Iiic Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   18
 
Même avec un long double, voire plus, cela ne suffit pas. Je ne peux pas changer la taille maximale d'un int ?
0
choubaka Messages postés 39442 Date d'inscription   Statut Modérateur Dernière intervention   2 105
 
ce sont des primitives ... tu ne peux rien y changer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
choubaka Messages postés 39442 Date d'inscription   Statut Modérateur Dernière intervention   2 105
 
ceci dit, jusqu'à quelle valeur "titanesque" tu dois aller ?
0
Pip Iiic Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   18
 
10^100'000'000
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Alors l'utilisation de GMP parait adapté comme disait Antoine
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
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".
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
10^(10^8) < 2^(2^29), donc un tel nombre peut être représenté de manière exacte sur 500 Mo.
Avec les machines actuelles ça reste techniquement faisable, mais l'algorithme doit être astucieux avec des fichiers tampons car effectivement la RAM risque de ne pas aimer du tout...
0
choubaka Messages postés 39442 Date d'inscription   Statut Modérateur Dernière intervention   2 105
 
suis donc les conseils d'antoine alors...
0