/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R O B L E M E   D E   L I N E A R I T E   D A N S   L ' I N T E R P O L A T I O N   " E N T I E R E "  :                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/interpolation.01$c' :                                                                                      */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20180624083241).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  <stdio.h>

extern    double    floor();

#define   NEUT(x)                                                                                                                       \
                    (x)
#define   NEGA(x)                                                                                                                       \
                    (-(x))
#define   ADD2(x,y)                                                                                                                     \
                    ((x)+(y))
#define   FLOT(x)                                                                                                                       \
                    ((double)(x))
#define   ENTIER_FLOTTANT(x)                                                                                                            \
                    AINT_a_peu_pres(x,epsilon_de_conversion_entier)
#define   AINT_a_peu_pres(x,epsilon)                                                                                                    \
                    AINT((x+epsilon))
#define   AINT(x)                                                                                                                       \
                    FLOT(floor((double)x))
#define   DIS2(x,a,b)                                                                                                                   \
                    ((x)*(a+b))
#define   BAR2(point1,point2,lambda)                                                                                                    \
                    ADD2(DIS2(point1,NEUT(1),NEGA(lambda))                                                                              \
                        ,DIS2(point2,NEUT(lambda),NEGA(0))                                                                              \
                         )
#define   BARY(origine,extremite,lambda)                                                                                                \
                    BAR2(origine,extremite,lambda)
                                        /* Afin de definir 'BARY(...)' pour definir 'v $xiii/aleat.2$vv$DEF INTERPOLATION_LINEAIRE'  */
                                        /* qui elle-meme permet de definir 'v $xci/valeurs.02$I iINTERPOLATION_LINEAIRE'.            */

main()
          {
          int       np,npA=0,npB=22;
                                        /* Il y a donc probleme avec 'npB=22' mais pas pour beaucoup d'autres valeurs et par         */
                                        /* exemple 'npB=23'...                                                                       */

#define   vnpA                                                                                                                          \
                    FLOT(npA)
#define   vnpB                                                                                                                          \
                    FLOT(npB)

          double    epsilon_de_conversion_entier=0;
                                        /* Le probleme disparait a partir de 'epsilon=0.0000000000000009' (comme evidemment dans     */
                                        /* 'v $xci/valeurs_inte$K epsilon='...).                                                     */

          for       (np=npA ; np<=npB ; np++)
                    {
                    double lambda=(np-vnpA)/(vnpB-vnpA);
                    double valeur_courante_interpolee=BARY(vnpA,vnpB,lambda);
                                        /* Ceci est "inspire" de 'v $xci/valeurs_inte$K iINTERPOLATION_LINEAIRE'...                  */

                    printf("np=%d     valeur_courante_interpolee=%.17g     (int)valeur_courante_interpolee=%.17g\n"
                          ,np
                          ,valeur_courante_interpolee
                          ,ENTIER_FLOTTANT(valeur_courante_interpolee)
                           );
                                        /* Voir le probleme decrit dans 'v $xiirv/.PUZZ.11.1.$U 20180623120530' ou encore dans       */
                                        /* 'v $xci/valeurs_inte$K 20180623121923'...                                                 */
                    }
          }



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