Perte de la distributivité de la Multiplication sur l'Addition





                    3.70 * (2.20 + 1.20)          = 12.580001 = 0x414947AF
                                                            #            #

est différent de :



                    (3.70 * 2.20) + (3.70 * 1.20) = 12.580000 = 0x414947AE
                                                            #            #



Les calculs sont effectués en simple précision (c'est-à-dire sur 32 bits et ce afin de simplifier l'édition hexa-décimale des résultats) sur un PC Linux à l'aide du programme suivant (où les fonctions 'ADD' et 'MUL' sont destinées à forcer l'ordre des additions et des multiplications) :



                    float     ADD(x,y)
                    float     x,y;
                              {
                              return(x+y);
                              }
                    float     MUL(x,y)
                    float     x,y;
                              {
                              return(x*y);
                              }

main() { float $A=3.7,B=2.2,C=1.2; float X,Y;
X=MUL((A),ADD((B),(C))); Y=ADD(MUL((A),(B)),MUL((A),(C)));
printf("%.6f * (%.6f + %.6f) = %.6f\n",A,B,C,X); printf("(%.6f * %.6f) + (%.6f * %.6f) = %.6f\n",A,B,A,C,Y); }



Voici, au passage, un exemple de résultats obtenus en double précision (c'est-à-dire sur 64 bits) :



                    3.70 * (2.00 + 1.20)          = 11.840000000000002 = 0x4027AE147AE147AF
                                                                     #                    #

est différent de :



                    (3.70 * 2.00) + (3.70 * 1.20) = 11.840000000000000 = 0x4027AE147AE147AE
                                                                     #                    #












Jean-François COLONNA
www.lactamme.polytechnique.fr
jean-francois.colonna@polytechnique.edu
CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641, Ecole Polytechnique, CNRS, 91128 Palaiseau Cedex, France

[Site Map, Help and Search [Plan du Site, Aide et Recherche]]
[The Y2K bug [Le bug de l'an 2000]]
[Croyez-vous que les Nombres Réels existent dans un ordinateur et que les calculs flottants sont sûrs ?]
[N'oubliez pas de visiter Une Machine Virtuelle à Explorer l'Espace-Temps où vous trouverez plusieurs milliers d'images et d'animations à la frontière de l'Art et de la Science]
(Site WWW CMAP28 : cette page a été créée le 24/02/2017 et mise à jour le 26/04/2017 12:07:27 -CEST-)



Copyright (c) Jean-François Colonna, 2017.
Copyright (c) CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2017.