CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C                                                                                                                                     C
C         T E S T   L I N E A I R E ,   T R I V I A L   E T   V I O L E N T   D E S   E R R E U R S   D ' A R R O N D I  :            C
C                                                                                                                                     C
C                                                                                                                                     C
C         Author of '$xtf/flottant.42$f' :                                                                                            C
C                                                                                                                                     C
C                     Jean-Francois COLONNA (LACTAMME, 20231210111238).                                                               C
C                                                                                                                                     C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

          program main

          double precision    A,B,x0,x1,x2,x3,x4,x5,x6,x7
C                                         Utilisation de la "double precision" representant les nombres flottants sur 64 bits.        C

          B=4095.1
          A=B+1
C                                         D'ou :                                                                                      C
C                                                                                                                                     C
C                                                           A - B = 1                                                                 C
C                                                                                                                                     C

          x0 = 1
          x1 = (A*x0)-B
          x2 = (A*x1)-B
          x3 = (A*x2)-B
          x4 = (A*x3)-B
          x5 = (A*x4)-B
          x6 = (A*x5)-B
          x7 = (A*x6)-B
C                                         Evidemment :                                                                                C
C                                                                                                                                     C
C                                                           x1 = A*x0 - B                                                             C
C                                                              = A*1  - B                                                             C
C                                                              = A    - B                                                             C
C                                                              = 1                                                                    C
C                                                                                                                                     C
C                                       et de meme :                                                                                  C
C                                                                                                                                     C
C                                                           x2 = x3 = x4 = x5 = x6 = x7 = 1                                           C
C                                                                                                                                     C

          write(*,*) x0
          write(*,*) x1
          write(*,*) x2
          write(*,*) x3
          write(*,*) x4
          write(*,*) x5
          write(*,*) x6
          write(*,*) x7
C                                          A la date du 20231210133307, cela donne systematiquement les bons resultats (=1). Cela     C
C                                        vient du fait que les "compilateurs" Fortran sont des traducteurs en C. Or l'examen des      C
C                                        '$c's correspondants montre que la traduction de :                                           C
C                                                                                                                                     C
C                                                           B=4095.1                                                                  C
C                                                                                                                                     C
C                                        donne sur les MACHINEs '$LACT??' :                                                           C
C                                                                                                                                     C
C                                                           b = 4095.1f;                                                              C
C                                                                                                                                     C
C                                        et le "f" est le signe d'une simple precision, or le test 'v $xtc/flottant.42$c float'       C
C                                        montre qu'en simple precision, cela fonctionne correctement. Il convient donc de trouver     C
C                                        un vrai compilateur Fortran...                                                               C

C                                          A la date du 20231210135000, j'ai trouve la solution. Par exemple, sur '$LACT19', il       C
C                                        suffit d'utiliser les options :                                                              C
C                                                                                                                                     C
C                                                           f95       -fdefault-real-8                        flottant.42$f           C
C                                                                                                                                     C
C                                        et sur 'CMAP28' -ex "porte-de-la-chapelle.polytechnique.fr"- :                               C
C                                                                                                                                     C
C                                                           gfortran  -fdefault-real-8 -fdefault-double-8     flottant.42$f           C
C                                                                                                                                     C
C                                        pour obtenir :                                                                               C
C                                                                                                                                     C
C                                                                    1.0000000000000000                                               C
C                                                                    1.0000000000004547                                               C
C                                                                    1.0000000018630999                                               C
C                                                                    1.0000076314440776                                               C
C                                                                    1.0312591580864137                                               C
C                                                                  129.04063743775941                                                 C
C                                                               524468.25500880636                                                    C
C                                                           2148270324.2415719                                                        C
C                                                                                                                                     C
C                                                                                                                                     C
C                                         Du coup, ce programme possede deux proprietes exceptionnelles :                             C
C                                                                                                                                     C
C                                            1-Il ne peut contenir ni d'erreurs(s) de logique, ni d'erreurs(s) de programmation !     C
C                                                                                                                                     C
C                                            2-La valeur exacte des resultats {x1,x2,x3,x4,x5,x6,x7} est connue a l'avance (=1) !     C
C                                                                                                                                     C
C                                                                                                                                     C
C                                         Le probleme vient de la partie decimale (0.1) de 4095.1 car, en effet, elle demande une     C
C                                       infinite de "decimales" en binaire :                                                          C
C                                                                                                                                     C
C                                                           0.0 0011 0011 0011 0011 0011 0011 0011 0011 0011 ... (ad infinitum)       C
C                                                                                                                                     C
C                                       et ne peut donc etre representee exactement dans un ordinateur...                             C

          end



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