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