Multiplication

Résolu
eth_gascon Messages postés 11 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 11 avril 2005 - 3 janv. 2005 à 03:19
eth_gascon Messages postés 11 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 11 avril 2005 - 4 janv. 2005 à 18:45
salut
j'ai posé ma question ici :

http://www.javascriptfr.com/forum.v2.aspx?ID=221610

j'ouvre un nouveau sujet pour apparaitre dans les dernier message du forum ^^

merci

4 réponses

the_smurf Messages postés 283 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 juin 2006
4 janv. 2005 à 16:52
La question ne se pose pas vraiment car sur les sites professionnel on évite un maximum de faire des calculs en js. On préfère effectuer un maximum de chose coté serveur (donc en java par exemple) pour ne pas être dépendant de la machine client.
Les calculs que l'on laisse sur le client sont généralement très simples car ils ne sont sensés servir, à mon avis, qu'à la mise en page, les données étant déjà calculées.

Je n'ai pas énormément d'expérience professionnel mais j'ai déjà vu plusieurs fois, dans d'autres technologies que le js, le passage systématique des flottants en entiers afin d'éviter les problèmes... Est-ce la meilleur solution??? pas sûr du tout car les tailles mémoires utilisées et le nombre de calculs intermédiaires sont vraisemblablement plus importants. Mais tant que l'on ne fait pas de l'embarqué ou de l'optimisation et que l'on ne manipule pas de nombres frolant déjà l'overflow sous forme de flottant... c'est utilisable.
3
the_smurf Messages postés 283 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 juin 2006
3 janv. 2005 à 14:34
Pour moi le problème vient du fait que les calculs de flottant sont mal géré.


Je pense que ce qui ce passe c'est que le nombre flottant que l'on rentre en décimal est converti en binaire pour les calculs.


Pour coder les chiffres après la virgule je ne sais pas comment c'est fait par l'interprêteur js (car il y a plusieurs codage possible) mais on utilise vraisemblablement les 64bits où les derniers bits sont significatifs (en effet 1 en dec 1 en bin mais 10 en dec 1010 en bin etc donc si 0.1 en dec est lu comme 1000000...00000000 en dec plus une information sur la place de la virgule lors de la convertion en bin on peut avoir qq chose avec des bits significatifs en fin ex 0110000..101011111 en bin). En multipliant 2 flottants, on dépasse donc la limite des 64bits... le résultats est en quelque sorte tronqué et quand on recode le résultat en décimal est est faussé.

Voilà c'était mon explication perso (c'est peut être complètement faux mais je pense que c'est plausible).

Maintenant pour régler le problème:
Moi je passerais par les entiers pour mes calculs (on peut même créer un function qui le fait à notre place)
ex: 0.1 * 0.1 = 1*1/(10*10)=0.1
... 0.1234*0.1234=1234*1234/(10000*10000)=...
0
eth_gascon Messages postés 11 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 11 avril 2005
3 janv. 2005 à 18:45
effectivement cette solution donne un resultat "vraiment" juste
je me demande quand meme (suis un peu chiant) si c'est comme sa qu'il fond dans les site professionnel?

merci

ps: si je voi Sun leur dit que leur langage est trés bien mais qu'il aurait pu lui aprendre a calculer avec des flotant
0
eth_gascon Messages postés 11 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 11 avril 2005
4 janv. 2005 à 18:45
ok merci
0
Rejoignez-nous