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
Publicité
Posté le 28-07-2006 à 20:27:43
olivthill
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.
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
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.
'long long int' n'existe pas en C++
Taz
bisounours-codeur
Posté le 28-07-2006 à 23:06:04
ouais enfin bon, bon nombre de compilateur le supporte et c'est en passe de normalisation.
nisalon_caje
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 ?
olivthill
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.
Taz
bisounours-codeur
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
olivthill
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.
nisalon_caje
Posté le 29-07-2006 à 14:36:40
ok merci pour toutes ces réponses
Publicité
Posté le 29-07-2006 à 14:36:40
slash33
Posté le 29-07-2006 à 19:54:39
Pourquoi ne pas passer par un double ?
karlkox
Posté le 29-07-2006 à 21:24:17
Si un long long int ne suffit, un double me parait juste inadéquat ...