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

 


Dernière réponse
Sujet : [JavaScript] 3 * 6.4 = 19.200000000000003
nabab 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 ...

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
nabab 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 ...
MagicBuzz 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 ;)
nabab 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 ......
MagicBuzz 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.
nabab Derniere news empirique >> 3*xx.xx un des champs doit avoir le bit 4 à 1 pour que cela deconne ....
nabab 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--

nabab Cette erreur se produit également avec Opera 5, pour une fois que tous les navigateurs ont le meme comportement  :D
nabab 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 ....
BENB Station HP sous HP-UX, processeur RISC HP, HP quoi...
nabab HP avec processeur INTEL ? Quel OS ?
BENB Bon , ben j'ai essaye le lien et moi aussi j'ai l'erreur :
Netscape 4.6.1 sous HP...
nabab Un petit test online ----> http://siteavie.com/nabab/test.htm
nabab 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 ....
nabab 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
line on doit rire ou pleurer en lisant un tel post ?
nabab 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
MagicBuzz 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.
FMulder Wow, ca fait quand meme peur un bug comme ca.
 
----------------------------
Plus tu pedales moins vite
Moins tu avances plus vite
nabab Au plaisir ...
Toucouch

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

nabab 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
Toucouch 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!
Toucouch 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)*;
}
cthulhu 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 ;)
nabab 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.
cthulhu il me semble qu'avec un cast, ca doit marcher, mais jai jamais essaye:m
x=(int)6.4*3
nabab 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.

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