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

  FORUM HardWare.fr
  Programmation

  [JavaScript] 3 * 6.4 = 19.200000000000003

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JavaScript] 3 * 6.4 = 19.200000000000003

n°13891
nabab
I'm blogging this.
Posté le 12-02-2001 à 16:56:41  profilanswer
 

Quelle est la méthode pour arrondir un chiffre en javascript ?(si elle existe)
 
En effet, dans une de mes fonctions javascript, lors du calcul de 3 * 6.4 j'obtiens ceci 19.200000000000003, une ame charitable poue me tirer de ce faux pas.


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
mood
Publicité
Posté le 12-02-2001 à 16:56:41  profilanswer
 

n°13892
cthulhu
Merci, merci...
Posté le 12-02-2001 à 17:13:37  profilanswer
 

il me semble qu'avec un cast, ca doit marcher, mais jai jamais essaye:m
x=(int)6.4*3

n°13893
nabab
I'm blogging this.
Posté le 12-02-2001 à 17:18:09  profilanswer
 

Cthulhu> Tu essaies de me regonfler le moral en ce debut de semaine en me faisant rire aux larmes ?
G précisé que mon langage de "programmation" etait javascript. Par contre je vais préciser le résultat de l'opération qui est 19.2 et oui donc qui ne peut etre un int.


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°13894
cthulhu
Merci, merci...
Posté le 12-02-2001 à 17:21:01  profilanswer
 

ok, excuse moi, pour moi aussi , c'est le début de la semaine...
mais je dois dire que moi meme en relisant mon post jai verse une petite larme...mais pas de rire ;)

n°13896
Toucouch
Posté le 12-02-2001 à 17:27:06  profilanswer
 

Tu dois savoir à combien de décimales tu veux arrondir, non?
Alors si tu dois arrondir à un dixième près, tu peux toujours faire:
x=Math.round(10*6.4*3)/10;
Bien sûr, c'est artisanal, mais tu peux toujours faire une belle fonction toi-même du genre:
arrondi(trucaarrondir,nbdecimales)
{
return Math.round(pow(10,nbdecimales)*6.4*3)/pow(10,nbdecimales)*;
}

n°13899
Toucouch
Posté le 12-02-2001 à 17:34:10  profilanswer
 

Bon, voilà la version relue et corrigée qui marche...
 
 
function arrondi(trucaarrondir,nbdc)  
{  
  alert(Math.round(Math.pow(10,nbdc)*trucaarrondir)/Math.pow(10,nbdc));  
}  
 
Tout le monde peut se tromper, ça va!

n°13900
nabab
I'm blogging this.
Posté le 12-02-2001 à 17:37:07  profilanswer
 

Toucouch,  :D plus rien à taper juste copier coller. C merveilleux.
 
Par contre est ce que ce probleme est du à IE5.xx sous windows, ... est ce un bug repertorié .... ?
 
Merci


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°13901
Toucouch
Posté le 12-02-2001 à 17:40:53  profilanswer
 

nabab a écrit a écrit :

 
Par contre est ce que ce probleme est du à IE5.xx sous windows, ... est ce un bug repertorié .... ?




 
Alors là, désolé, mais tu m'en demandes trop!
 
Au plaisir...

n°13905
nabab
I'm blogging this.
Posté le 12-02-2001 à 17:56:22  profilanswer
 

Au plaisir ...


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°13925
FMulder
Posté le 12-02-2001 à 19:09:48  profilanswer
 

Wow, ca fait quand meme peur un bug comme ca.
 
----------------------------
Plus tu pedales moins vite
Moins tu avances plus vite

mood
Publicité
Posté le 12-02-2001 à 19:09:48  profilanswer
 

n°13959
MagicBuzz
Posté le 12-02-2001 à 22:17:02  profilanswer
 

C'est pas un bug...
 
C'est l'unité de virgule flottante des CPU qui sont foireuses...
 
C'est pour ça que dans les jeux kla virgule flottante pêche énormément, car le développeur doit préciser de faire les calculs selon différentes méthodes afin de ne pas avoir de résultats à la con..
 
Essaie ton script sur un AMD, un Cyrix et un Intel, tu va avoir des résultats différents (sisi, je t'assure)
 
Celà viens de la manière de calculer les virgules flottantes en binaire... Il se produit une erreur inévitable...
 
C'est ensuite aux développeurs de palier à cette erreur.
 
Certains compilos/interpréteurs font le boulot de corerction d'erreur à ta place (VB, certains compilos de C, etc.) mais d'autres pas.

n°13997
nabab
I'm blogging this.
Posté le 13-02-2001 à 08:41:14  profilanswer
 

C ahurissant quand meme de declencher ce type d'erreur en javascript sur une    multiplication .
Mais je commencais à proclamer que j'avais reussi à mettre à jour le probleme de la virugle flottante propre à INTEL mais mon ton etait ironique. MagiBuzz apporte une nouvelle vision des pIII (pIII600EB), je n'en reviens pas que l'on arrive à tomber ds le syndrome INTEL CL en faisant juste une multiplication à 2 chiffres. Il faut à tout prix que j'arrive à trouver un papier dessus, car j'ai quand meme du mal à le croire qu' un simple 3*6.4 peut etre aussi devastateur ....
 
 
Merci


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°13998
line
Bisounours'Land
Posté le 13-02-2001 à 08:46:07  profilanswer
 

on doit rire ou pleurer en lisant un tel post ?

n°13999
nabab
I'm blogging this.
Posté le 13-02-2001 à 08:50:39  profilanswer
 

Ben le mieux c que l'on expose sa config et si on a eu aussi le probleme.
 
Windows 2000 Server PIII 600 EB IE5.5  
--->3 * 6.4 = 19.200000000000003


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14000
nabab
I'm blogging this.
Posté le 13-02-2001 à 08:53:43  profilanswer
 

Coté serveur il n'y a pas de probleme, j'ai fiat une page ASP en utilisant VBScript et JScript aucun probleme du cote serveur ....


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14001
nabab
I'm blogging this.
Posté le 13-02-2001 à 09:04:26  profilanswer
 

Un petit test online ----> http://siteavie.com/nabab/test.htm


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14040
BENB
100% Lux.
Posté le 13-02-2001 à 11:46:07  profilanswer
 

Bon , ben j'ai essaye le lien et moi aussi j'ai l'erreur :
Netscape 4.6.1 sous HP...

n°14043
nabab
I'm blogging this.
Posté le 13-02-2001 à 11:51:56  profilanswer
 

HP avec processeur INTEL ? Quel OS ?


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14044
BENB
100% Lux.
Posté le 13-02-2001 à 11:53:10  profilanswer
 

Station HP sous HP-UX, processeur RISC HP, HP quoi...

n°14048
nabab
I'm blogging this.
Posté le 13-02-2001 à 12:00:27  profilanswer
 

Donc cela approche plus d'une erreur du au langage Script JavaScript que des processeurs. A mois que RISC et INTEL utilisent les memes instructions ....


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14111
nabab
I'm blogging this.
Posté le 13-02-2001 à 15:14:08  profilanswer
 

Cette erreur se produit également avec Opera 5, pour une fois que tous les navigateurs ont le meme comportement  :D


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14124
nabab
I'm blogging this.
Posté le 13-02-2001 à 15:52:39  profilanswer
 

Dans ma conquete du maikessekilsepasse j'ai essaye ceci :
 
Math.exp(Math.log(3)+Math.log(6.4))
 
Et qu'est ce que cela donne d'apres vous ?

 

--Message édité par nabab--


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14135
nabab
I'm blogging this.
Posté le 13-02-2001 à 16:11:45  profilanswer
 

Derniere news empirique >> 3*xx.xx un des champs doit avoir le bit 4 à 1 pour que cela deconne ....


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14151
MagicBuzz
Posté le 13-02-2001 à 17:08:30  profilanswer
 

l'erreur est la même sous IE 5.5 et NS 3.0 sur un Bi-PII
 
Pour info, l'erreur est la même avec BASIC.
 
Ben oui...
 
C'est pas nouveau.
 
Et je vous affirme que celà ne vient pas de JavaScript ou Basic qui sont buggés, mais des procs qui ne font que des approches lorsqu'ils font des calculs en virgule flottante.

n°14161
nabab
I'm blogging this.
Posté le 13-02-2001 à 17:33:08  profilanswer
 

Apres moult recherche et un post sur un forum de microsoft qui s'est avéré fructueux en recherche cela est du comme guru et moi meme l'avions supposé à la représentation binaire des nombres. En effet des nombres decimaux finis en javascript peuvent devenir "infinis" à decimales redondantes (cycliques) par le systeme binaire employé par javascript comme vous pouvez le lire à cette adresse :  
http://jibbering.com/faq/#_47 puis la section 4.6
 
donc MagicBuzz je n'argumente aucunement une position qui serait à ton encontre car le systeme binaire employé par javascript depend de toute maniere des processeurs employés pour le faire tourner mais ce que je veux dire c que cette erreur en elle meme est propre au langage script car elle n'est pas présente dans tous les langages ......


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
n°14168
MagicBuzz
Posté le 13-02-2001 à 17:59:34  profilanswer
 

nabab > Bon, OK, dans l'absolu, tu as raison.
 
Mais sâche que ce phénomène se produit avec tout les langages... Mais souvent, le compilateur rajoute des instructions permettant de débarasser les variables utilisateurs de ces résidus. (notament VB)
 
Et deplus, il est reproduit au niveau du CPU. En assembleur, tu a les même erreures, même si pourtant tu n'a rien fait de particulier.
 
On avait mis en évidence ce truc en TP, avec des Pentium 90 (non buggés) Et on autrait pu faire ce même TP avec un Mac ou un Dec Alpha, on aurait eu le même problème.
 
C'est pour celà que j'ai pensé un peut trop vite, certes à cette solution. Enfin... De toute façon, le problème reste le même :D faut que tu tronques afin de te débarrasser des chiffres non significatifs ;)

n°14178
nabab
I'm blogging this.
Posté le 13-02-2001 à 18:30:14  profilanswer
 

MagicBuzz ok tu as raison mais ...  :D Je deconne Et en effet les langages la plupart du temps palient cette erreur ...
Sinon merci en tout cas à Toucouch qui dés le début avait proposer une solution qui se revele la seule disponible .... et sinon à tous les autres forumeurs qui ont aidé à mettre en avant les problèmes de la virgule flottante que nous pouvons dans des instructions aussi simpliste ...


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
mood
Publicité
Posté le   profilanswer
 


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

  [JavaScript] 3 * 6.4 = 19.200000000000003

 

Sujets relatifs
Date en JavaScriptJavaScript Beep Beep !
JAVASCRIPT : Comment détecter le changement d'url ?[ASP / JavaScript] HELP
Besoin d'un pro en JavaScript !!ASP/VBScript/Javascript/HTML ouin... ouin...
Help JavaScript : comment modifier le script suivant ?[ javascript ] spécifier la location d'une popup
du php dans une fonction javascript ?JavaScript - redirection vers la page index en cas de TOP==SELF
Plus de sujets relatifs à : [JavaScript] 3 * 6.4 = 19.200000000000003


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