/*************************************************************************************************************************************/ /* */ /* T E S T D E S P R O B L E M E S S U R L A N O T I O N D E M U L T I P L E S */ /* D E N O M B R E S F L O T T A N T S : */ /* */ /* */ /* Author of '$xtc/multiple.01$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, AAAAMMJJhhmmss). */ /* */ /*************************************************************************************************************************************/ #include "INCLUDES.01.I" /* Introduit le 20051116101731... */ extern double fmod(); #define fREST(a,b) \ mod(a,b) #define fMULD(a,b) \ muld(a,b) #define fARRI(x) \ fMULD(x,epsilon) #define FACTEUR \ 2 double mod(x,y) /* Fonction se substituant a 'fmod(...)'. */ double x,y; { double ax=ABSO(x),ay=ABSO(y); double r1,r2,dr1; double r; r1=fmod(ax,ay); dr1=FACTEUR*r1; r2=fmod(FACTEUR*ax,ay); if (r2 == dr1) { r=r1; } else { r=ay-r1; } if (x<0) { r=-r; } else { } return(r); } double muld(x,y) double x,y; { double ax=ABSO(x),ay=ABSO(y); double r; double z; r=fREST(ax,ay); if (x>=0) { z=x+r; } else { z=x-r; } return(z); } main() { int k; double maille=0.1000000000000000; double epsilon=1.0e-8; double x=0; for (k=-8 ; k<=8 ; k=k+1) { double x=k*maille; double y,z; int a,b; z=fREST(x,maille); y=fMULD(x,maille); printf("\n coordonnee=%+.17f noeud=%+.17f",x,y); y=fARRI(y); printf(" arrondi=%+.17f",y); } }