Int pas suffisants (4 octets) !!! Comment faire?? - Programmation
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
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!!!
Effectivement il faut que je code ces types moi même mais bon, si le code existe déjà c'est mieux...
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
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
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...
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.
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)
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.
Marsh Posté le 27-07-2001 à 11:08:12
Ne vous inquietez pas!! Ya une finalité: faire de la crypto
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).
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...
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
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