[c] Comment stocker un TRES TRES gros entiers?

Comment stocker un TRES TRES gros entiers? [c] - Programmation

Marsh Posté le 26-11-2001 à 19:58:41    

Salut,  
 
Je cherche un type qui permet de stocker un entier positif qui est trop gros pour le type int et le type long.
 
D'avance merci!

Reply

Marsh Posté le 26-11-2001 à 19:58:41   

Reply

Marsh Posté le 26-11-2001 à 20:04:17    

salut,
 
ben qu'est ce que tu appelles gros dèjà !!! 3000 chiffres ???
En tout cas, tu peux "couper" ton entier en plus petit morceau : je m'explique :
genre tu as 1234567899876543211234512345
Ben tu déclare un certains nobres d'entiers en mettant tes bouts du gros entier dedans genre
a=123456
b=789987
c=654321
d=....
 
Sinon, tu peux faire une liste chianée dan laquelle chaque alvéole, contient un des chiffres de ton entier!!!
voilà


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
Reply

Marsh Posté le 26-11-2001 à 20:09:06    

Le probleme est que je dois pouvoir manipuler ce nombre et en particulier le convertir en binaire. (le programme est fait, mais il ne marche que pour des "petits nombres"
 
la taille est d'environ 20, 25 chiffres!
 
a+

Reply

Marsh Posté le 26-11-2001 à 21:23:37    

soit tu crées une classe avec redéfinitions d'operateurs (j'ai deja du faire ca pour l'ecole), soit tu utilises des entiers sur 64 bits (c'est peut-être pas dispo partout, en delphi c'est in64), mais pour plus de 20 chiffres ça ira pas...
pour le truc de la classe, on en parle régulièrement dans le forum, et y a eu un topic y a moins d'une semaine.

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 26-11-2001 à 21:32:04    

antp a écrit a écrit :

soit tu crées une classe avec redéfinitions d'operateurs (j'ai deja du faire ca pour l'ecole), soit tu utilises des entiers sur 64 bits (c'est peut-être pas dispo partout, en delphi c'est in64), mais pour plus de 20 chiffres ça ira pas...
pour le truc de la classe, on en parle régulièrement dans le forum, et y a eu un topic y a moins d'une semaine.  
 
 




 
On peut faire des classes en C ???
 
Si quelqu'un peut m'expliquer, voire me donner un exemple...
 
On m'a parler de creer une structure, mais j'ai du mal à voir comment...

Reply

Marsh Posté le 26-11-2001 à 22:56:38    

:(

Reply

Marsh Posté le 26-11-2001 à 22:57:22    

heu, non désolé, si c'est du C pur pas de classes, c'est en C++ qu'on peut faire des classes.
Mais bon ça doit quand même être faisable (tableaux, fonctions, ...)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 27-11-2001 à 09:38:29    

Une fois le grand nombre dans une chaîne, on peut faire la division Euclidienne caractère par caractère (comme à la main). Y a eu un sujet la dessus y a un certain temps ... ;)

Reply

Marsh Posté le 27-11-2001 à 09:40:35    

mario51 a écrit a écrit :

Le probleme est que je dois pouvoir manipuler ce nombre et en particulier le convertir en binaire. (le programme est fait, mais il ne marche que pour des "petits nombres"
 
la taille est d'environ 20, 25 chiffres!
 
a+  




 
Faudrait déjà savoir si tu manipules des entiers ou des flottants.
 
Ensuite il me semble qu'avec un long double en borland C sous dos on atteint 80 bits...
 
ps : ooops j'avais mal lu l'énoncé:D... regarde si il n'y a pas des double int.

 

[edtdd]--Message édité par fodger--[/edtdd]


---------------
Just drink it!
Reply

Marsh Posté le 27-11-2001 à 10:20:32    

En C, tu peut utiliser INT_64 :)
ex: INT_64 nb; //entier sur 64bit

Reply

Marsh Posté le 27-11-2001 à 10:20:32   

Reply

Marsh Posté le 27-11-2001 à 10:21:37    

Avec un TRES TRES gros HD? :D
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 27-11-2001 à 11:06:57    

J'etais pres a proposer "long long" mais ca revient au meme que d'écrire INT_64, histoire de gout :)

Reply

Marsh Posté le 27-11-2001 à 11:18:08    

KarLKoX a écrit a écrit :

J'etais pres a proposer "long long" mais ca revient au meme que d'écrire INT_64, histoire de gout :)  




long long, c'est du C standard (C99), contrairement a int_64 que je sache.
A+,

 

[edtdd]--Message édité par gilou--[/edtdd]


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 27-11-2001 à 11:35:45    

de toute façon, la question était pour 20, 25 chiffres... 64 bits ça fait 19 chiffres (bon 20 mais le premier doit etre un 1) en non signé... donc ça va pas.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 27-11-2001 à 14:53:54    

Gilou>justement, mario code en C et a choisir, je préfere me plier a quelque chose de normaliser :)

Reply

Marsh Posté le 27-11-2001 à 15:56:42    

La solution est simple.
TU calcule combien de bits il te faut pour stocker ton entier...
 
et tu definit un entier comme suit:
unsigned int NB:X
 
NB: le nom de ta variable.
X: Le nombre de bit ki vont etre utiliser en memoir pour stocker ton entier....
 
et voila  ;)

Reply

Marsh Posté le 27-11-2001 à 19:57:00    

bigben49 a écrit a écrit :

La solution est simple.
TU calcule combien de bits il te faut pour stocker ton entier...
 
et tu definit un entier comme suit:
unsigned int NB:X
 
NB: le nom de ta variable.
X: Le nombre de bit ki vont etre utiliser en memoir pour stocker ton entier....
 
et voila  ;)  




 
Petite question: comment je calcule le nombre de bits?
 
merci!

Reply

Marsh Posté le 27-11-2001 à 21:41:29    

La solution pour calculer le nombre de bit est
 
de resoudre l'equation:
2^X=VM(valeur max de ton nombre)
 
X=e^(LN(VM)/LN(2))
 
e^(x): espotentiel de X
Ln(x):Logarythme neperien de X.


---------------
http://www.programmation-fr.com
Reply

Marsh Posté le 27-11-2001 à 22:02:59    

bigben2 a écrit a écrit :

La solution pour calculer le nombre de bit est
 
de resoudre l'equation:
2^X=VM(valeur max de ton nombre)
 
X=e^(LN(VM)/LN(2))
 
e^(x): espotentiel de X
Ln(x):Logarythme neperien de X.  




 
 
Merci beaucoup!
Je vais essaye ca.

Reply

Marsh Posté le 27-11-2001 à 22:18:18    

mario51 a écrit a écrit :

 
 
Petite question: comment je calcule le nombre de bits?
 
merci!  




 
Cette declaration ne plait pas a mon compilateur est j'ai donc pleins d'erreurs !!!!!
 
Comment faire?

Reply

Marsh Posté le 27-11-2001 à 22:24:37    

bah je sais pas peut etre trouve un autre compilateur... ;)


---------------
http://www.programmation-fr.com
Reply

Marsh Posté le 27-11-2001 à 22:52:49    

bigben2 a écrit a écrit :

bah je sais pas peut etre trouve un autre compilateur... ;)  




 
Tu es sur que c'est du C????

Reply

Marsh Posté le 28-11-2001 à 00:59:59    

KarLKoX a écrit a écrit :

Gilou>justement, mario code en C et a choisir, je préfere me plier a quelque chose de normaliser :)  




C'est bien ce que je voulais souligner: il faut preferrer long long.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 28-11-2001 à 08:42:36    

gilou a écrit a écrit :

 
C'est bien ce que je voulais souligner: il faut preferrer long long.
A+,  




 
J'ai un probleme avec long long :
error C2632: 'long' followed by 'long' is illegal
 
Que faire....?

Reply

Marsh Posté le 28-11-2001 à 09:00:07    

bigben2 a écrit a écrit :

La solution pour calculer le nombre de bit est
 
de resoudre l'equation:
2^X=VM(valeur max de ton nombre)
 
X=e^(LN(VM)/LN(2))
 
e^(x): espotentiel de X
Ln(x):Logarythme neperien de X.  
 




X = log2(VM) plutot...
log2 etant le log base 2...
log2(x)=log(x)/log(2) avec log un log (nepeerien, decimal ou autre...)
 
Il convient bien sur d'arrondir le resultat a la valeur superieure...
 
pour ce qui est de  
 

Citation :

unsigned int NB:X  
 
NB: le nom de ta variable.  
X: Le nombre de bit ki vont etre utiliser en memoir pour stocker ton entier....


 
je doute de la legalite...
en effet cette syntaxe s'utilise dans un structure pour utiliser independament les differents bits d'un entier, or la il ne s'agit pas de decouper un entier mais bien d'en concatener plusieurs...

 

[edtdd]--Message édité par BENB--[/edtdd]

Reply

Marsh Posté le 28-11-2001 à 11:26:37    

Si les chiffres sont dans une chaîne de caractères ("illimitée" ), voir http://www.google.fr/search?hl=fr&q=huge+integer&meta= si y a outils (dont http://www.cs.msstate.edu/~cs4153/ [...] erver.html pour les additionner). On doit bien pouvoir trouver les autres opérations si besoin (le titre dit STOCKAGE, pas manipulation).

Reply

Marsh Posté le 28-11-2001 à 23:43:06    

mario51 a écrit a écrit :

 
 
J'ai un probleme avec long long :
error C2632: 'long' followed by 'long' is illegal
 
Que faire....?  




Utiliser un compilo qui implemente la norme C99.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-11-2001 à 08:18:08    

Regarde ici ça pourra peut etre t'aider:
le topic :"Comment passer d'un chaine de chiffes a une chaine de bit".
 
 
http://forum.hardware.fr/forum2.ph [...] topic=&p=2

Reply

Marsh Posté le 04-12-2001 à 09:52:20    

(je vais passer pour un fou là:D)
 
La solution est toute conne, il suffit de passer par un pointeur d'entier...

 

[edtdd]--Message édité par fodger--[/edtdd]


---------------
Just drink it!
Reply

Marsh Posté le 04-12-2001 à 09:54:24    

:heink: tu pourrais expliquer là ?

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 04-12-2001 à 10:32:40    

bein disons qu'avec un unsigned long tu vas de 0 à 4.294.967.295... ce qui est déjà énorme.
 
Si vraiment ça dépasse, il n'a pas d'autres choix (enfin je vois pas autrement:D) que de passer par un pointeur d'entier...
 
genre int *chiffre;
chiffre=(int *)malloc(size of(int));
 
vous en pensez quoi?
 
Il y a aussi des long double qui sont des flottants sur 80 bits...


---------------
Just drink it!
Reply

Marsh Posté le 04-12-2001 à 10:52:53    

ok unsigned long int, mais bon ça résout pas le problème, t'as que 9-10 chiffres et il en veut 20-25.
long double, mwouais la précision est pas tj terrible...
et puis ça ne fait "que" 1208925819614629174706176 donc on est tout juste à 24-25 chiffres
quand on a ton histoire de int* je vois pas en quoi l'allocation dynamique change quelque chose à la taille du int :??:

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 04-12-2001 à 11:53:01    

antp a écrit a écrit :

ok unsigned long int, mais bon ça résout pas le problème, t'as que 9-10 chiffres et il en veut 20-25.
long double, mwouais la précision est pas tj terrible...
et puis ça ne fait "que" 1208925819614629174706176 donc on est tout juste à 24-25 chiffres
quand on a ton histoire de int* je vois pas en quoi l'allocation dynamique change quelque chose à la taille du int :??:  
 
 




 
rien sur la taille de l'élément lui même... mais c'est la solution, stocker le nombre en plusieurs parties...


---------------
Just drink it!
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed