Variable de très grande taille

Variable de très grande taille - C++ - Programmation

Marsh Posté le 28-07-2006 à 20:27:43    

Bonjour, dans un programme j'ai besoin de manipuler des variables entière de très grande taille (> 10 puissance 10). Cependant, quand je les crée, elles deviennent négatives . Je pense que c'est du à leur taille démeusurée malgré que je les ai déclaré en long long int .
 
Comment faire pour les utiliser correctement ?
 
Merci d'avance
 
NC

Reply

Marsh Posté le 28-07-2006 à 20:27:43   

Reply

Marsh Posté le 28-07-2006 à 22:41:42    

Le long long int peut être déclaré non signé :
 
unsigned long long int i
 
On peut alors avoir 20 chiffres car
2 puissance 64 est 18 446 744 073 709 551 616.
 
Avec un long long int signé on 19 chiffres.
 
Donc un long long int devrait être largement suffisant pour contenir 10 puissance 10. Je soupçonne que le problème est ailleurs.
 
Une faute courante consiste à utiliser correctemment des long long int, sauf dans la routine d'affichage du nombre.

Reply

Marsh Posté le 28-07-2006 à 22:44:36    

heu, je ne pense pas que le probleme soit là (dans l'affichage) parce que je fais simplement un cout<<le_tres_grand_nombre<<endl; et je le convertis en + dans une fonction pour l'afficher à l'écran dans une appli opengl. Cependant, j'essaierai le unsigned long long int demain et je vous dirai le résultat
sur ce, bonne nuit :)

Reply

Marsh Posté le 28-07-2006 à 22:55:17    

olivthill a écrit :

Le long long int peut être déclaré non signé :
 
unsigned long long int i
 
On peut alors avoir 20 chiffres car
2 puissance 64 est 18 446 744 073 709 551 616.
 
Avec un long long int signé on 19 chiffres.
 
Donc un long long int devrait être largement suffisant pour contenir 10 puissance 10. Je soupçonne que le problème est ailleurs.
 
Une faute courante consiste à utiliser correctemment des long long int, sauf dans la routine d'affichage du nombre.


 
 :heink:  'long long int' n'existe pas en C++

Reply

Marsh Posté le 28-07-2006 à 23:06:04    

ouais enfin bon, bon nombre de compilateur le supporte et c'est en passe de normalisation.

Reply

Marsh Posté le 28-07-2006 à 23:07:58    

en fait je viens de retester, et unsigned long long int marche, cependant il m'arrive parfois d'atteindre sa valeur limite (18446744073709551615)... y a t il plus grand ?

Reply

Marsh Posté le 28-07-2006 à 23:10:30    

En C, avec un printf() il faudrait écrire  

printf("%I64d", le_tres_grand_nombre);
ou
printf("%lld", le_tres_grand_nombre);

%d ou %ld tronquerait le nombre et pourrait afficher un nombre négatif.

Reply

Marsh Posté le 28-07-2006 à 23:11:51    

qui te parle de C bordel ! et ton erreur de format, c'est la corruption mémoire directe, ça tronque rien du tout.
 
y a pas plus grand, utilise un truc comme gmp, ou change d'algo / utilise des logarithmes / fais du calcul flottant

Reply

Marsh Posté le 28-07-2006 à 23:12:03    

Non, il n'y pas plus grand. Après, il faut utiliser des bibliothèques spéciales qui traitent les très grands nombres.

Reply

Marsh Posté le 29-07-2006 à 14:36:40    

ok merci pour toutes ces réponses :)

Reply

Marsh Posté le 29-07-2006 à 14:36:40   

Reply

Marsh Posté le 29-07-2006 à 19:54:39    

Pourquoi ne pas passer par un double ?

Reply

Marsh Posté le 29-07-2006 à 21:24:17    

Si un long long int ne suffit, un double me parait juste inadéquat ...

Reply

Marsh Posté le 18-08-2006 à 22:51:24    

__int64 ?

Reply

Marsh Posté le 19-08-2006 à 00:18:55    

...

Reply

Sujets relatifs:

Leave a Replay

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