Int pas suffisants (4 octets) !!! Comment faire??

Int pas suffisants (4 octets) !!! Comment faire?? - Programmation

Marsh Posté le 26-07-2001 à 20:45:47    

Salut
 
Dites moi, comment faire en C/C++ pour travailler avec des nombres qui surpassent la "range" des int? En effet il faut que je travaille avec des nombres de l'ordre de 2^700!!!!
Est ce qu'il existe des classes toutes faites permattant de travailer avec de tels nombres?
 
Merci

Reply

Marsh Posté le 26-07-2001 à 20:45:47   

Reply

Marsh Posté le 26-07-2001 à 20:49:01    

Essaye avec les float ou les double, si non aprés faut que tu te programme ça à la main

Reply

Marsh Posté le 26-07-2001 à 20:56:43    

Malheureusement les float et double ne suffisent pas.
Au max le double est codé sur 8 octets soit 64 bits alors que j'ai besoin d'utiliser des chiffres codés sur plus de 700 bits!!! :pt1cable:  
Effectivement il faut que je code ces types moi même mais bon, si le code existe déjà c'est mieux...:)

Reply

Marsh Posté le 26-07-2001 à 21:06:45    

Désolé effectivement renseignement pris le double ne monte que jusqu'à 3.4E308 un poil juste ;)

Reply

Marsh Posté le 26-07-2001 à 21:16:01    

Effectivbemen 2^700 ca fait du monde
un truc
 
class CHNumber
{
private
  LPBYTE   digits;
public
CHNumber();
~CHNumùber();
CHNumber(DWORD value);
....
 
le truc est de redfinir les operateurs de + - * / etc ...
pr gerer les depassements et cree dynamicement un nbre aussi grd ke tu veux avec ton tableau d'octet.
ex bateuau  
 
                   digits[1] digits[0]
                       |     |
128 + 192 ( >255) = [ 70][255]
 
c un exo assez simple d'implementation objet, si j'ai le tps je peux te le develloper un peu

Reply

Marsh Posté le 26-07-2001 à 22:55:43    

à l'école on avait dû faire une classe "BigInteger" qui stockait deux digits dans un octet, pour accepter des nombres très grands.
On avait dû refaire les 4 opérations.
La version que j'avais faite était relativement performante par rapport à ce que les autres avaient fait.
Si ça t'intéresse...


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

Marsh Posté le 27-07-2001 à 08:52:27    

S'il veut faire un calcul "absolu" sans perte de données avec les mantisses, il faut utiliser des chaînes de longueur 2^700, chaque caractère contenant le chiffre exact.
 
En QuickBasic (DOS), quelqu'un avait écrit une bibliothèque pour calculer en BCD. C'était encombrant, mais on ne perdait aucun chiffre, comme on le ferait à la main.
 
Si c'est codé en puissance de deux, il doit y avoir moyen de coder en binaire "directement".  
10011010011001010001111101101...........01011
En les regroupant sous forme d'octets, ça fait 700/8 caractères.
 
L'addition, c'est pas trop compliqué... Reste à traiter les autres opérations.

Reply

Marsh Posté le 27-07-2001 à 10:30:40    

braisik a écrit a écrit :

Salut
 
Dites moi, comment faire en C/C++ pour travailler avec des nombres qui surpassent la "range" des int? En effet il faut que je travaille avec des nombres de l'ordre de 2^700!!!!
Est ce qu'il existe des classes toutes faites permattant de travailer avec de tels nombres?
 
Merci  




 
2^700 ? Mais c'est pour faire quoi ? Ca existe même pas dans la nature des tels chiffres... (même 100 je pense que ca existe pas)

Reply

Marsh Posté le 27-07-2001 à 11:04:45    

C'est peut-être juste une "colle" pour faire travailler les petites cellules grises du forum.  :lol:

Reply

Marsh Posté le 27-07-2001 à 11:08:12    

Ne vous inquietez pas!! Ya une finalité: faire de la crypto  ;)

Reply

Marsh Posté le 27-07-2001 à 11:08:12   

Reply

Marsh Posté le 27-07-2001 à 14:42:24    

sinon tu peux utiliser le langage Lisp, les entier ne sont pas limités, la seule limite est la taiile de la mémoire disponible. Mais bon, c'est un des seuls intérets du langage (à mon avis).


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 27-07-2001 à 23:32:30    

Franchement, je te conseille vivement de coder ce genre de truc toi-même, que ce soit en C, en C++ ou n'impote quel autre langage que tu utilises.
C'est un exercice classique qui te permettra de te perfectionner en algorithmique. Perso, j'ai déja eu à le faire 2 fois (en pascal et en C), dont une fois pour faire un petit système de crypto. C'était assez enrichissant...

Reply

Marsh Posté le 27-07-2001 à 23:51:22    

maple gere tres bien les tres gd entiers....

Reply

Marsh Posté le 28-07-2001 à 03:15:46    

Java aussi :)

Reply

Marsh Posté le 28-07-2001 à 04:22:55    

Prograzine a fait un article interressant la dessus
http://www.citeweb.net/discase/9/GDNOMBRE.htm


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

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