[Enseignement] Commande floor

classic Classic list List threaded Threaded
3 messages Options
Raymond Moché Raymond Moché
Reply | Threaded
Open this post in threaded view
|

[Enseignement] Commande floor

Quelqu’un peut-il nous renseigner ?
.6*9+.6 donne ans=6
floor(.6*9+.6) donne ans=5.
Est-ce bien raisonnable ?
Y a-t-il des précautions à prendre en utilisant floor ?
Raymond Moché


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
Jean Matthieu LEURENT Jean Matthieu LEURENT
Reply | Threaded
Open this post in threaded view
|

Re: [Enseignement] Commande floor

Bonjour.
Ce phénomène est du à la représentation des nombres dans l'ordinateur. Ils sont représentés en base 2 au format IEEE 754 avec un nombre limité de bits (chiffres). Cela provoque par la suite des erreurs de calculs liées au fait que la représentation du nombre est tronqué. De plus, un nombre peut s'écrire avec un nombre fini de chiffres en base 10 et un nombre infini de chiffres en base 2!
Exemple en base 10 pour expliquer le phénomène: Admettons que nous utilisions seulement 1 chiffre aprés la virgule pour représenter les nombres fractionnaires compris entre 0 et 1. 1/3+1/3 +1/3 est alors représenté par 0.3+0.3+0.3. La somme calculée vaut alors 0.9 au lieu de 1. C'est exactement ce qui se passe dans tout les ordinateurs utilisant une représentation normalisée des flottants.
Vous pouvez visualiser le problème en modifiant le format d'affichage. Saisir format(20) puis refaire les calculs.
Dans les calculatrices, des algorithmes sont mis en place pour contrer ces phénomènes, mais ce n'est pas infaillible, loin s'en faut.



Le Mardi 14 janvier 2014 10h35, Raymond Moché <[hidden email]> a écrit :
Quelqu’un peut-il nous renseigner ?
.6*9+.6 donne ans=6
floor(.6*9+.6) donne ans=5.
Est-ce bien raisonnable ?
Y a-t-il des précautions à prendre en utilisant floor ?
Raymond Moché


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
Samuel GOUGEON Samuel GOUGEON
Reply | Threaded
Open this post in threaded view
|

Re: [Enseignement] Commande floor

In reply to this post by Raymond Moché
Bonjour,

Le 14/01/2014 10:35, Raymond Moché a écrit :
> Quelqu’un peut-il nous renseigner ?
> .6*9+.6 donne ans=6
Les arrondis numériques mènent à l'écart à 6
-->.6*9+.6 - 6
  ans  =
   - 8.882D-16

-->%eps
  %eps  =
     2.220D-16

Comme le résidu est <0, floor() arrondit en dessous. Comme il est > %eps
en valeur absolue,
nearfloat(..) restera impuissante à contourner le problème.

Ce sont les joies du calcul numérique... Le calcul formel a les siennes.

Samuel
_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement