Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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 944

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 math import pi,exp,sqrt
>>> 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...

En ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
vingt huit plus quatre-vingt six
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums