Variable contenant beaucoups de chiffre

Résolu
ToXik117 -  
 ToXik117 -
Bonjour,

Voila je dois trouver (ou créer ça me derange pas) un programme dont la fonction serait aa mise en memoire RAM de nombre assez gros. Voila l'opération que le programme devrait faire --> 2^1096-1
Il me faudrais une variable comme Double. Mais Double ne sert que pour 308chiffres, cepandant il ne prends en compte que les 19 premiers chiffres, et remplace les autres par des 0.
Il me faut donc une variable de type Double, mais qui garde tout sa précision.

Voila, j'espere avoir été assez explicite, Merci d'avance !

A voir également:

5 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Il y des gens qui ont eu le même souci de précision que toi. Cherche bien sur le forum.
1096 bits, ça fait beaucoup. Un double est codé sur 64 bit et un flottant double précision sur 128. (regarde double ou quadruple precision sur wikipedia, tu comprendras mieux le problème).
Il y a des bibliothèques scientifique (comme GSL) qui permettent d'augmenter la précision. http://www.freeprogrammingresources.com/mathlib.html
Sinon, en C++, faire ça avec des entiers et des classes doit être assez aisement réalisable. Il suffit de mettre plusieurs entier dans la classe et de redéfinir toutes les opérations.
class int1152
{
uint64 n[18];
}
int1152 operator+(int1152 a,int1152 b)
{
    short retenus[18];
    int1152 r;
    if(a.n[0]>1<<63 || b.n[0]>1<<63)// à vérifier
       retenu[0]=1;
    r.n[0]=a.n[0]+b.n[0];
    if(a.n[1]>1<<63 || b.n[1]>1<<63)// à vérifier
       retenu[1]=1;
    r.n[1]=a.n[1]+b.n[1]+retenu[0];
    //etc.
    return r;
}
1
ToXik117
 
Désolé, mais je ne comprends pas trop ton code source. Ni les "classes". Tu pourrais me developper ça s'il te plaît ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
quel est ton niveau de programmation ?
As tu regarder les bibliothèques mathématiques ?
0
ToXik117
 
En fait c'est complexe, je poste pas pour moi, mais pour un ami, qui lui s'y connais assez bien quand même ^^. Il a tout appris sur le Site du Zero, et vu ce qu'il demande il doit bien s'y connaitre quand même.
Il m'as dit que des quadruple ça existe pas En C ni En C++
0
ToXik117
 
En fait, il sais faire:
-Delcaration De variable
-Boucle (If, While, Then, For)
-Saisis de donnés
-Création de fichier
-Lecture, ecriture et save de donné dans un fichier
-Indexation
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
programmation orienté objet ? Le plus simple serait tout de même de discuter avec lui.
AuTant dire qu'il est débutant.
Le quadruple précision existe sur certaines machine, mais pas sur les processeurs type Intel.
0
francis
 
a toi d'inventer une astuce.
chaine de caractère ?
0
ToXik117
 
Non désolé, mais c'est pas possible, on ne peux pas faire d'operation sur une chaine de caractere, en tous cas, pas que je sache !
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Il existe des langages non typé qui sont capables de faire des opérations sur des chaînes de caractères, par exemple Perl.
Je ne sais pas ce que l'on entend par 'quadruple précision' mais jadis les coprocesseurs Intel série x87 étaient capables de travailler sur des entiers de 64 bits.
Tu peux, comme il t'a été dit, développer une classe, sinon il existe des bibliothèques comme GMP.
Tu peux aussi choisir un autre langage: Python travaille avec des entiers seulement limités par la taille de la mémoire RAM.
Bonne réflexion.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
pour les flottant :
simple précision : 32 bits (float en C)
double précision : 64 bits (double en C)
quadruple précision : 128 bits (long double en C, supporté par peu de compilateurs https://en.wikipedia.org/wiki/Quadruple_precision_floating-point_format
Python travail sur un nombre indéfini en longueur d'entier ? C'est bon à savoir, bien que très étonnant. Je testerai.
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Ok, donc pour les entiers, la quadruple précision, ce serait donc aussi 64 bits ?
Pour Python, je confirme; par défaut, lors de la déclaration, les entiers sont considérés comme 'integer' c'est-à-dire des entiers signés 32 bits (donc +- 2 milliards) et lorsque le besoin s'en fait sentir, ils sont automatiquement transformé dans un autre format 'long' qui n'a quasiment plus de limites.
Pour t'en convaicre, essaie le programme suivant:
#!/usr/bin/python
# -*- coding: utf-8 -*-

a, b = 1, 1
while (a != 0) :
  a = input("Donner une valeur:")
  b = input("Donner l'exposant:")
  print a, "puissance", b, "=", a**b
En donnant 2 et 1096, tu obtiendra le résultat demandé... plus de trois cents chiffres !
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
python est un programme offrant plein de possibilités. Il faudrait que je m'y mette, ca avait pas l'air trop dur quand j'avais été initié
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
Ce n'est pas le genre de trucs pour lesquels les scientifiques utilisent mathlab à tout hasarre ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
http://www.mathworks.com/matlabcentral/newsreader/view_thread/242167
https://www.mathworks.com/matlabcentral/fileexchange/6446-multiple-precision-toolbox-for-matlab
ça semble en effet possible avec des toolbox supplémentaire.
Et GMP en C.
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
En tout cas, c'est un bon sujet, je m'étais déja posé la question.. évidement il faut re-concevoir toutes les opérations, mais je pense que c'est uen partie très interessante de la programmation: dépasser les limites de base du langage ....
0
ToXik117
 
Désolé de ne pas répondre directement, je viens d'entamer ma rentrée, donc je vais être un peu occupé. Je vois ce qu'on peux faire avec ce que vous m'avez dit, et je vous tiens au courant, Merci de vos réponses !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ToXik117
 
Probléme résolu !!!
Merci a vous tous, pour vos réponse !
C'est grace a l'idée de Loupius que j'ai réussis, c'est vrai qu'en language Python, il n'y as aucune limite.

Merci a tous !
0