Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1561 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  problème d'opération arithmétique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème d'opération arithmétique

n°1485740
simius_com​putus
oh Gary boy
Posté le 03-12-2006 à 19:55:16  profilanswer
 

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

mood
Publicité
Posté le 03-12-2006 à 19:55:16  profilanswer
 

n°1485771
gebruik
Posté le 03-12-2006 à 21:30:41  profilanswer
 

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
n°1485810
olivthill
Posté le 03-12-2006 à 22:21:49  profilanswer
 

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

n°1485861
simius_com​putus
oh Gary boy
Posté le 04-12-2006 à 09:38:31  profilanswer
 

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.

n°1487293
simius_com​putus
oh Gary boy
Posté le 06-12-2006 à 15:22:27  profilanswer
 

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..

n°1487678
hauhazice
Posté le 06-12-2006 à 21:44:17  profilanswer
 

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é
n°1488260
simius_com​putus
oh Gary boy
Posté le 07-12-2006 à 19:11:41  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  problème d'opération arithmétique

 

Sujets relatifs
Problème de référence avec une page d'accueilProblème serialize...
Problème de design avec IEProblème actionscript: temporisation entre deux instructions
gros problème de décalage/alignement avec IE [résolu, nouveau prob...]Probleme de rollover sous Netscape et Opera
probleme avec sqlplus[c++] Hook "anti-rebond" et problème touches ALT
ou est le probleme ? idcompilerdefines.incProbleme d'affichage
Plus de sujets relatifs à : problème d'opération arithmétique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR