>Nitro: les entiers sont à précision arbitraire
Non, les entiers d'AMS sont limités à 2^2040-1 (essaye 2^2039-1+2^2039, puis 2^2040), c'est-à-dire environ 10^614.
>Thibaut:
>Le pb doit être comme le dit the_beast, que à y==63, Val dépasse la capactité d'un unsigned long.
Non,
unsigned long va jusqu'à 2^32-1 seulement.
Pour aller jusqu'à 2^64-1, il faut un
unsigned long long. Après, il n'y a plus rien à faire avec les types de GCC. Ce qu'on peut faire, c'est:
typedef struct INT128 {
unsigned long long msll;
unsigned long long lsll;
} int128;
int128 duplicate(int128 x)
{
if (x.lsll && 0x8000000000000000)
return (int128){x.msll+x.msll+1,x.lsll+x.lsll}
else
return (int128){x.msll+x.msll,x.lsll+x.lsll};
}
int128 Val={0,1};
puis remplacer
Val*=2 par
Val=duplicate(Val);.
Ça, ça devrait marcher pour ton code (ça va jusqu'à 2^128-1), mais il faut une routine d'affichage personnalisée, donc des divisions par 10, ce qui est très compliqué avec ce type de structures.

Aussi, évidemment, il faut initialiser Val à autre chose qu'à 0 (dans mon exemple, je l'initialise à 1).
>obza_Fazer:
>et alors comment modifier ma grande valeur en un chiffre a puissance (donc un peu moins precis mais ça ne me gene pas) ???
float Val=1.;
Il faut aussi changer le format du
sprintf.
[edit]Edité par Kevin Kofler le 29-09-2001 à 21:15:56[/edit]