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...
mareek
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).
braisik
Ne vous inquietez pas!! Ya une finalité: faire de la crypto ;)
Carbon_14
C'est peut-être juste une "colle" pour faire travailler les petites cellules grises du forum. :lol:
robUx4
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)
Carbon_14
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.
Bah un extended ca fé 10 octets...
de 3.6 x 10^–4951 à 1.1 x 10^4932 ca devrais aller...
Mais une petite contrainte, il faut que tu utilise C++ Builder.
antp
à 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...
JoeHell
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
c un exo assez simple d'implementation objet, si j'ai le tps je peux te le develloper un peu
LetoII
Désolé effectivement renseignement pris le double ne monte que jusqu'à 3.4E308 un poil juste ;)
braisik
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...:)
LetoII
Essaye avec les float ou les double, si non aprés faut que tu te programme ça à la main
braisik
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?