Limite des nombres réels en prog

Limite des nombres réels en prog - Algo - Programmation

Marsh Posté le 04-08-2011 à 00:44:12    

Bonjour,

 

J'ai une liste de nombres ordonnés de maniere coissante. Je voudrais pouvoir générer, à tout moment, un nombre entre deux nombre succéssifs de cette liste.

 

Exemple:

 

J'ai: 1 - 4 - 5 - 6 - 13.7 - 18 ...
Pour simplifier, on va dire que je veux générer un nombre entre 5 et 6, je fais (5+6)/2 = 5.5 et je l'insert à la bonne position (liste triée) en utilisant n'importe quel algo (exemple recherche binaire/dichotomique).
J'aurai: 1 - 4 - 5 - 5.5 - 6 - 13.7 - 18 ...

 

Cependant, en générant des nombres comme ça, on peut arriver à un moment ou on ne peux plus généré de nombre entre deux nombre donnés et on aura un dépassera la capacité à cause de la précision des types (float, double etc selon les langages de programmation).

 

Avez vous une solution/algo pour éviter ce-là ? Serait il par exemple possible de coder ces nombres en chaines de caractères au lieu de nombre réels (e.g. double) ? Toute proposition est la bienvenue.

 

Merci d'avance.


Message édité par charlebakhtovsky le 04-08-2011 à 00:51:22
Reply

Marsh Posté le 04-08-2011 à 00:44:12   

Reply

Marsh Posté le 04-08-2011 à 00:47:42    

Tu utilises quel langage ?
 
Il existe des libs qui permettent effectivement de contourner ces limites en C/C++


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 04-08-2011 à 00:50:28    

WiiDS a écrit :

Tu utilises quel langage ?
 
Il existe des libs qui permettent effectivement de contourner ces limites en C/C++


 
Ce problème concerne seulement les langages C et C++ ?
Qu'en est il de Java ou Python (c'est les deux autre langages que je peux utiliser).

Reply

Marsh Posté le 04-08-2011 à 01:41:31    

charlebakhtovsky a écrit :


 
Ce problème concerne seulement les langages C et C++ ?
Qu'en est il de Java ou Python (c'est les deux autre langages que je peux utiliser).


Non ce problème concerne que certains langages, en général les plus bas niveau. De mémoire le Java est concerné par cette limitation, Python je sais pas


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 04-08-2011 à 01:58:55    

WiiDS a écrit :


Non ce problème concerne que certains langages, en général les plus bas niveau. De mémoire le Java est concerné par cette limitation, Python je sais pas


ça voudrais dire qu'il y a des langages ou des bibliothèques qui font en sorte que si j'ai deux nombres A et B, le fait de faire ce qui suit, ne donne aucun problème même quand on arrive à un très petit nombre C (proche de A) et qu'on continue ?
 
Boucle infinie:
  C = (A+B)/2
  B = C;
Fin
 

Reply

Marsh Posté le 04-08-2011 à 02:15:44    

[:prozac] J'ai mal compris ton problème, je pensais que tu parlais des limites maximum des nombres, pas de la précision des flottants :D

 

Mais une recherche me montre que la réponse reste la même: En C/C++, il existe une solution pour contourner cette limitation jusqu'à une précision qui devrait théoriquement te satisfaire: http://www.apfloat.org/apfloat/ (je ne sais pas si cette lib est récente ou la meilleure, je sais juste qu'elle existe)

 

Et il doit exister une manière d'implémenter cette solution dans d'autres langages si ceux ci ne le font pas par défaut :jap:


Message édité par WiiDS le 04-08-2011 à 02:15:57

---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 04-08-2011 à 08:08:24    

Les problemes d eprecisions des reels sont du a la machine, pas au langage.
 
http://floating-point-gui.de/
 
Pour faire du multiprecision, MPRF est en general la solution recommandé mais je doute que tu es besoin d'aller jusque la.

Reply

Marsh Posté le 04-08-2011 à 18:42:24    

Joel F a écrit :

Les problemes d eprecisions des reels sont du a la machine, pas au langage.
 
http://floating-point-gui.de/
 
Pour faire du multiprecision, MPRF est en general la solution recommandé mais je doute que tu es besoin d'aller jusque la.


Si si, merci. J'ai besoin de pouvoir à tout moment générer un nombre entre deux autre donnés, il me semble donc que la multiprecision avec MPFR est une bonne solution.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed