problème d'opération arithmétique

problème d'opération arithmétique - HTML/CSS - Programmation

Marsh Posté le 03-12-2006 à 19:55:16    

bonjour,
 
je programme une calculatrice graphique en javascript, et je rencontre un problème énervant : lorsque j'augmente la valeur de x avec un pas numérique de la forme 1/(2^n) et ses multiples (par exemple : 1, 0.5, 0.25, 0.75, 0.125, etc), tout va bien, mais dès que le pas ne vérifie pas cette condition, j'obtient à partir de la 3ème opération un résultat bizarre avec un chiffre qui se balade tout seul à la 15ème place derrière la virgule  :??:  
 
par exemple avec ce script :
 

Citation :

<script language="JavaScript">
var x=20
 for(i=0;i<5;i++) {
  x+=0.2
 }
document.write(x)
</script>


 
j'obtient ceci : 20.599999999999998
 
alors qu'avec celui-ci :
 

Citation :

<script language="JavaScript">
var x=20
 for(i=0;i<5;i++) {
  x+=0.25
 }
document.write(x)
</script>


 
j'obtient bien 21.25.
 
savez-vous comment résoudre ce problème ?
 
merci

Reply

Marsh Posté le 03-12-2006 à 19:55:16   

Reply

Marsh Posté le 03-12-2006 à 21:30:41    

N'oublie pas qu'une machine compte en binaire et les conversions en décimal peuvent être parfois un peu déroutantes.
Le cas est fréquent sur les paniers de sites de vente en ligne lors que l'on manipule des quantités importantes de produits ayant un prix unitaire à deux ou trois décimales, multiplié par un taux de TVA à trois décimal aussi.
 
Si c'est pour tracer une courbe, tu ne verras pas la différence entre 20.599999999999998 et 20,60


Message édité par gebruik le 03-12-2006 à 21:31:00
Reply

Marsh Posté le 03-12-2006 à 22:21:49    

La solution consiste peut-être à arrondir avec x = Math.round(x * 10) / 10

Reply

Marsh Posté le 04-12-2006 à 09:38:31    

merci pour vos réponses.  
olivthill je pense que je vais faire comme tu dis. Et puis au lieu d'augmenter x par rapport à sa valeur de juste avant, je vais l'augmenter par rapport à celle d'origine, de n fois le pas, ce sera plus précis.
gebruik, en effet au niveau de la courbe ça ne change rien. Quoique, j'ai souvent des anomalies de reliage des points qui apparaissent sans raison :
 
http://morierjo.perso.cegetel.net/anomalies.gif
 
Mais cela m'embétait surtout au niveau du tableau des valeurs, comme les x sont faussés, les y aussi.

Reply

Marsh Posté le 06-12-2006 à 15:22:27    

problème résolu, ainsi que les "vides" dans le reliage des points. Reste encore quelques anomalies de courbe qui déborde de l'axe des ordonnées (notamment aux asymptotes verticales).
 
c'est marrant les courbes qu'on peut obtenir en maniant les arrondis, les min et max etc..

Reply

Marsh Posté le 06-12-2006 à 21:44:17    

Javascript est connu pour être une bille de renom en matière d'opération mathématique


---------------
dH Design - Spécialiste en standards web et en accessibilité
Reply

Marsh Posté le 07-12-2006 à 19:11:41    

je m'en serais douté..
je sais qu'il n'est pas vraiment fait pour un usage autre que l'agrémentation des pages web. Mais c'est le seul langage que je connaisse assez bien.

Reply

Sujets relatifs:

Leave a Replay

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