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
[Contact me]

www.lactamme.polytechnique.fr

CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641, École polytechnique, Institut Polytechnique de Paris, CNRS, France

[Site Map, Help and Search [Plan du Site, Aide et Recherche]]
[The Y2K Bug [Le bug de l'an 2000]]
[Real Numbers don't exist in Computers and Floating Point Computations aren't safe. [Les Nombres Réels n'existent dans les Ordinateurs et les Calculs Flottants ne sont pas sûrs.]]
[N'oubliez pas de visiter Une Machine Virtuelle à Explorer l'Espace-Temps et au-delà 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 02/24/2017 et mise à jour le 14/11/2023 17:56:19 -CET-)



Copyright © Jean-François COLONNA, 2017-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2017-2023.