Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 03-02-2011 12:12:34
- bibifoc
- Invité
Représentation des réels
Bonjour,
Dans un ordinateur, les réels sont souvent stockés sous la forme de float ou double. Une partie de la mémoire contient la mantisse et l'autre partie l'exposant. Pour représenter les réels avec précision, on est limité par le nombre de chiffres après la virgule, et par l'exposant qui est borné. Impossible d'avoir exactement les irrationnels et la plupart des rationnels (ceux avec un nombre infini de chiffres après la virgule). J'ai pensé à une autre représentation pour gagner en précision.
On stocke dans l'ordinateur une table avec beaucoup de nombres premiers. On représente les réels par des fractions rationnelles. On décompose le numérateur et le dénominateur en puissance de nombres premiers. De cette manière on peut avoir une représentation exacte de certains nombres rationnels (limité par les nombres premiers stockés). Comme les rationnels sont denses dans les réels, on pourrait calculer de bonnes approximations des irrationnels (pi, e racine(2), ...).
Que pensez-vous de cette représentation (complexité, précision, ...)? Si vous connaissez d'autres représentations permettant d'atteindre une précision élevée n'hésitez pas.
Cordialement,
Bibifoc
#2 03-02-2011 14:21:30
- Dillon
- Invité
Re : Représentation des réels
Bonjour,
Je ne vois pas très bien ce que tu gagnes....
D'abord je te rappelle que la méthode habituelle pour représenter les float ou double les représente aussi par des fractions rationnelles. Seulement, elle se limite à des puissances de 2 pour le dénominateur.
Si j'ai bien compris, pour avoir une représentation exacte de tous les nombres premiers jusqu'à 9 chiffres (en décimal), il te faudrait une table d'au moins 50 millions de nombres premiers, car il y a environ 50 millions de nombres premiers inférieurs à 1 milliard, et tu ne peux représenter exactement un nombre premier que par lui-même dans ta méthode. 32 bits suffisent pour les entiers 'classiques'.
Enfin, peux-tu nous donner un exemple précis de codage (avec le nombre d'octets qu'il utilise) et l'algorithme de l'addition, qui doit être hypercompliqué sans repasser par un format conventionnel
#3 03-02-2011 18:30:14
- bibifoc
- Invité
Re : Représentation des réels
Avec la méthode habituelle, on ne peut pas représenter exactement 2/3 par exemple. C'est en revanche assez simple avec la mienne.
L'idée de base, c'est de stocker les nombres sous forme de fractions pour gagner en précision sur les nombres rationnels. Exemple : 1 nombre double precision = 64 bits. 2 entiers= 2*32 bits = 64 bits. Pour le même espace mémoire, on peut représenter 2/3 sous forme de double ou sous forme de fraction. Une des formes est exacte et l'autre non. Mais utiliser des fractions d'entiers, ça limite les réels représentés à quelques milliards. Décomposer le numérateur et le dénominateur en puissance de nombres premiers donne accès à plus de valeurs très grandes / petites.
La table de nombres premiers occupe de la place. Ce n'est pas le cas de la décomposition d'un entier en nombres premiers. Je te ramène un exemple de code tout à l'heure pour illustrer mes propos.
#4 04-02-2011 14:21:54
- Dillon
- Invité
Re : Représentation des réels
Bonjour
Sans vouloir te décourager, j'ai fortement l'impression que tu fais fausse route.
À mon avis, dans le meilleur des cas, tu trouveras une bonne méthode pour représenter une certaine catégorie de nombres, par exemple "les rationnels à petits numérateur et dénominateur", mais tu ne gagneras pas à la fois en précision et en étendue, car tu ne peux toujours coder que 2 puissance N nombres différents avec N bits et que la méthode traditionnelle utilise toutes ces combinaisons (si on compte les quelques unes qui servent à noter les infinis et les non-nombres).
Mais je n'en dis pas plus tant que tu n'as pas donné l'algorithme (un vrai, pas "l'idée de base") du codage.
#5 04-02-2011 17:36:23
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 948
Re : Représentation des réels
Bonjour,
Je rejoins Dillon, je ne pense pas ce système viable...
Et comment vas-tu représenter les nombres transcendants ?
Ta représentation par décomposition en facteurs premiers :
* avec une table réclamera pas mal de calculs
* sans table, demandera encore plus de calculs.
Que pensez-vous de cette représentation (complexité, précision, ...)? Si vous connaissez d'autres représentations permettant d'atteindre une précision élevée n'hésitez pas.
Pour information, Python, te permet
* De travailler avec des nombres entiers dont la taille ne dépend que la RAM de ta machine :
Pour information, j'ai pu extraire 20000 décimales du nombre d'or en 4 s en ne manipulant que des entiers.
* Via le module "decimal" de travailler avec des nombres en virgule flottante théoriquement aussi grands que tu veux :
Mais alors, bonjour les temps de calcul...
* Via le module "decimal" toujours de faire du calcul formel avec des fractions.
Quelques exemples
>>> from decimal import *
>>> getcontext().prec = 40
>>> print Decimal('2').sqrt()
1.414213562373095048801688724209698078570
>>> print Decimal('203')/Decimal('43')
4.720930232558139534883720930232558139535
http://docs.python.org/library/decimal.html
@+
PS
Dillon, pourquoi ne t'inscris-tu pas, pour faire partie de la famille ? La Fédération Internationale des Echecs a pour devise : "Gens una sumus", nous formons qu'un seul peuple.
BiBmath pourrait la reprendre : le peuple des accros aux Maths !
Dernière modification par yoshi (04-02-2011 18:15:07)
Arx Tarpeia Capitoli proxima...
Hors ligne
Pages : 1