[BACK]Return to interval.h CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / include

Diff for /OpenXM_contrib2/asir2000/include/interval.h between version 1.14 and 1.15

version 1.14, 2016/06/29 08:16:11 version 1.15, 2018/03/29 01:32:53
Line 1 
Line 1 
 /*  /*
  * $OpenXM: OpenXM_contrib2/asir2000/include/interval.h,v 1.13 2015/08/14 13:51:55 fujimoto Exp $   * $OpenXM: OpenXM_contrib2/asir2000/include/interval.h,v 1.14 2016/06/29 08:16:11 ohara Exp $
 */  */
 #ifndef _INTERVAL_H  #ifndef  _INTERVAL_H
 #define _INTERVAL_H  #define  _INTERVAL_H
   
 #define PRINTF_G        0  #define  PRINTF_G  0
 #define PRINTF_E        1  #define  PRINTF_E  1
   
 #if defined(INTERVAL)  #if defined(INTERVAL)
   
 #include <math.h>  #include <math.h>
   
 #ifdef  sun  #ifdef  sun
 #if OSMajorVersion < 4 || (OSMajorVersion == 4 && OSMinorVersion < 1)  #if OSMajorVersion < 4 || (OSMajorVersion == 4 && OSMinorVersion < 1)
 #include <sys/ieeefp.h>  #include <sys/ieeefp.h>
 #endif  #endif
 #if defined(__svr4__)  #if defined(__svr4__)
 #include        <ieeefp.h>  #include  <ieeefp.h>
 #define FPNEAREST       fpsetround(FP_RN);  #define  FPNEAREST  fpsetround(FP_RN);
 #define FPPLUSINF       fpsetround(FP_RP);  #define  FPPLUSINF  fpsetround(FP_RP);
 #define FPMINUSINF      fpsetround(FP_RM);  #define  FPMINUSINF  fpsetround(FP_RM);
 #define FPTOZERO        fpsetround(FP_RZ);  #define  FPTOZERO  fpsetround(FP_RZ);
 #else  #else
 static char     *Interval_dummy;  static char  *Interval_dummy;
 #define FPNEAREST       ieee_flags("clear", "direction", Interval_dummy, &Interval_dummy);  #define  FPNEAREST  ieee_flags("clear", "direction", Interval_dummy, &Interval_dummy);
 #define FPPLUSINF       ieee_flags("set", "direction", "positive", &Interval_dummy);  #define  FPPLUSINF  ieee_flags("set", "direction", "positive", &Interval_dummy);
 #define FPMINUSINF      ieee_flags("set", "direction", "negative", &Interval_dummy);  #define  FPMINUSINF  ieee_flags("set", "direction", "negative", &Interval_dummy);
 #define FPTOZERO        ieee_flags("set", "direction", "tozero", &Interval_dummy);  #define  FPTOZERO  ieee_flags("set", "direction", "tozero", &Interval_dummy);
 #endif  #endif
 #endif  #endif
   
 #ifdef  linux  #ifdef  linux
 #include        <fpu_control.h>  #include  <fpu_control.h>
 #if 1  #if 1
   
 #if defined(__ARM_ARCH) || defined(ANDROID)  #if defined(__ARM_ARCH) || defined(ANDROID)
Line 49  static char *Interval_dummy;
Line 49  static char *Interval_dummy;
 #endif  #endif
 #endif /* __ARM_ARCH */  #endif /* __ARM_ARCH */
   
 #define LINUX_FPU_RC_MASK                               0xf3ff  #define  LINUX_FPU_RC_MASK        0xf3ff
 #define LINUX_FPU_SETCW(c)                      \  #define  LINUX_FPU_SETCW(c)      \
 {fpu_control_t __tmp__; _FPU_GETCW(__fpu_control);\  {fpu_control_t __tmp__; _FPU_GETCW(__fpu_control);\
  __tmp__ = (__fpu_control & LINUX_FPU_RC_MASK | c);\   __tmp__ = (__fpu_control & LINUX_FPU_RC_MASK | c);\
  _FPU_SETCW(__tmp__);}   _FPU_SETCW(__tmp__);}
 #define FPNEAREST       LINUX_FPU_SETCW(_FPU_RC_NEAREST);  #define  FPNEAREST  LINUX_FPU_SETCW(_FPU_RC_NEAREST);
 #define FPPLUSINF       LINUX_FPU_SETCW(_FPU_RC_UP);  #define  FPPLUSINF  LINUX_FPU_SETCW(_FPU_RC_UP);
 #define FPMINUSINF      LINUX_FPU_SETCW(_FPU_RC_DOWN);  #define  FPMINUSINF  LINUX_FPU_SETCW(_FPU_RC_DOWN);
 #define FPTOZERO                LINUX_FPU_SETCW(_FPU_RC_ZERO);  #define  FPTOZERO    LINUX_FPU_SETCW(_FPU_RC_ZERO);
 #else  #else
 #define _FPU_DEFAULT_p_FPU_RC_UP        0x1b72  #define  _FPU_DEFAULT_p_FPU_RC_UP  0x1b72
 #define _FPU_DEFAULT_p_FPU_RC_DOWN      0x1772  #define  _FPU_DEFAULT_p_FPU_RC_DOWN  0x1772
 #define _FPU_DEFAULT_p_FPU_RC_ZERO      0x1f72  #define  _FPU_DEFAULT_p_FPU_RC_ZERO  0x1f72
 #define FPNEAREST       __setfpucw(_FPU_DEFAULT);  #define  FPNEAREST  __setfpucw(_FPU_DEFAULT);
 #define FPPLUSINF       __setfpucw(_FPU_DEFAULT_p_FPU_RC_UP);  #define  FPPLUSINF  __setfpucw(_FPU_DEFAULT_p_FPU_RC_UP);
 #define FPMINUSINF      __setfpucw(_FPU_DEFAULT_p_FPU_RC_DOWN);  #define  FPMINUSINF  __setfpucw(_FPU_DEFAULT_p_FPU_RC_DOWN);
 #define FPTOZERO        __setfpucw(_FPU_DEFAULT_p_FPU_RC_ZERO);  #define  FPTOZERO  __setfpucw(_FPU_DEFAULT_p_FPU_RC_ZERO);
 #endif  #endif
 #endif  #endif
   
 #if defined(__osf__)  #if defined(__osf__)
 #if 0  #if 0
 #include        <float.h>  #include  <float.h>
 #define FPNEAREST       write_rnd(FP_RND_RN);  #define  FPNEAREST  write_rnd(FP_RND_RN);
 #define FPPLUSINF       write_rnd(FP_RND_RP);  #define  FPPLUSINF  write_rnd(FP_RND_RP);
 #define FPMINUSINF      write_rnd(FP_RND_RM);  #define  FPMINUSINF  write_rnd(FP_RND_RM);
 #define FPTOZERO        write_rnd(FP_RND_RZ);  #define  FPTOZERO  write_rnd(FP_RND_RZ);
 #else  #else
 #define FPNEAREST  #define  FPNEAREST
 #define FPPLUSINF  #define  FPPLUSINF
 #define FPMINUSINF  #define  FPMINUSINF
 #define FPTOZERO  #define  FPTOZERO
 #endif  #endif
 #endif  #endif
   
 #if defined(__FreeBSD__) && defined(__GNUC__)  #if defined(__FreeBSD__) && defined(__GNUC__)
 #include        <floatingpoint.h>  #include  <floatingpoint.h>
 #define FPNEAREST       fpsetround(FP_RN);  #define  FPNEAREST  fpsetround(FP_RN);
 #define FPPLUSINF       fpsetround(FP_RP);  #define  FPPLUSINF  fpsetround(FP_RP);
 #define FPMINUSINF      fpsetround(FP_RM);  #define  FPMINUSINF  fpsetround(FP_RM);
 #define FPTOZERO        fpsetround(FP_RZ);  #define  FPTOZERO  fpsetround(FP_RZ);
 #endif  #endif
   
 #if defined(VISUAL) || defined(__MINGW32__)  #if defined(VISUAL) || defined(__MINGW32__)
Line 102  static char *Interval_dummy;
Line 102  static char *Interval_dummy;
   
 /* no control function of floating point rounding */  /* no control function of floating point rounding */
 #ifndef FPNEAREST  #ifndef FPNEAREST
 #define FPNEAREST       fprintf(stderr, "Fpu control FPNEAREST is not supported in this machine yet.\n");  #define  FPNEAREST  fprintf(stderr, "Fpu control FPNEAREST is not supported in this machine yet.\n");
 #endif  #endif
 #ifndef FPMINUSINF  #ifndef FPMINUSINF
 #define FPMINUSINF      fprintf(stderr, "Fpu control FPMINUSINF is not supported in this machine yet.\n");  #define  FPMINUSINF  fprintf(stderr, "Fpu control FPMINUSINF is not supported in this machine yet.\n");
 #endif  #endif
 #ifndef FPPLUSINF  #ifndef FPPLUSINF
 #define FPPLUSINF       fprintf(stderr, "Fpu control FPPLUSINF is not supported in this machine yet.\n");  #define  FPPLUSINF  fprintf(stderr, "Fpu control FPPLUSINF is not supported in this machine yet.\n");
 #endif  #endif
 #ifndef FPTOZERO  #ifndef FPTOZERO
 #define FPTOZERO        fprintf(stderr, "Fpu control FPZERO is not supported in this machine yet.\n");  #define  FPTOZERO  fprintf(stderr, "Fpu control FPZERO is not supported in this machine yet.\n");
 #endif  #endif
 #define FPCLEAR         FPNEAREST  #define FPCLEAR    FPNEAREST
   
 #define MID_PRINTF_G    2  #define  MID_PRINTF_G  2
 #define MID_PRINTF_E    3  #define  MID_PRINTF_E  3
   
 /* data structures */  /* data structures */
 struct oItv {  struct oItv {
         short   id;          short  id;
         char    nid;          char  nid;
         char    pad;          char  pad;
         Num     inf;          Num  inf;
         Num     sup;          Num  sup;
 };  };
   
 typedef struct oItv *Itv;  typedef struct oItv *Itv;
   
 struct oIntervalDouble {  struct oIntervalDouble {
         short   id;          short  id;
         char    nid;          char  nid;
         char    pad;          char  pad;
         double  inf;          double  inf;
         double  sup;          double  sup;
 };  };
   
 typedef struct oIntervalDouble *IntervalDouble;  typedef struct oIntervalDouble *IntervalDouble;
   
 struct oforth {  struct oforth {
         short   sign;    short  sign;
         short   exp;    short  exp;
         double  u;    double  u;
         double  l;    double  l;
 };  };
   
 typedef struct oforth *forth;  typedef struct oforth *forth;
   
 struct oIntervalQuad {  struct oIntervalQuad {
         short   id;          short  id;
         char    nid;          char  nid;
         char    pad;          char  pad;
         forth   inf;          forth  inf;
         forth   sup;          forth  sup;
 };  };
   
 typedef struct oIntervalQuad *IntervalQuad;  typedef struct oIntervalQuad *IntervalQuad;
   
 struct oIntervalBigFloat {  struct oIntervalBigFloat {
         short   id;          short  id;
         char    nid;          char  nid;
         char    pad;          char  pad;
         BF      inf;          BF  inf;
         BF      sup;          BF  sup;
 };  };
   
 typedef struct oIntervalBigFloat *IntervalBigFloat;  typedef struct oIntervalBigFloat *IntervalBigFloat;
Line 171  typedef struct oIntervalBigFloat *IntervalBigFloat;
Line 171  typedef struct oIntervalBigFloat *IntervalBigFloat;
 extern int zerorewrite;  extern int zerorewrite;
   
 /* general macros */  /* general macros */
 #define INF(p)  ((p)->inf)  #define INF(p)  ((p)->inf)
 #define SUP(p)  ((p)->sup)  #define SUP(p)  ((p)->sup)
   
 #define NEWItvP(q)      ((q)=(Itv)MALLOC(sizeof(struct oItv)),\  #define NEWItvP(q)  ((q)=(Itv)MALLOC(sizeof(struct oItv)),\
                                         OID(q)=O_N,NID(q)=N_IP)            OID(q)=O_N,NID(q)=N_IP)
 #define NEWIntervalDouble(q)    ((q)=(IntervalDouble)MALLOC(sizeof(struct oIntervalDouble)),\  #define NEWIntervalDouble(q)  ((q)=(IntervalDouble)MALLOC(sizeof(struct oIntervalDouble)),\
                                         OID(q)=O_N,NID(q)=N_IntervalDouble)            OID(q)=O_N,NID(q)=N_IntervalDouble)
 #define NEWIntervalQuad(q)      ((q)=(IntervalDouble)MALLOC(sizeof(struct oIntervalQuad)),\  #define NEWIntervalQuad(q)  ((q)=(IntervalDouble)MALLOC(sizeof(struct oIntervalQuad)),\
                                         OID(q)=O_N,NID(q)=N_IntervalQuad)            OID(q)=O_N,NID(q)=N_IntervalQuad)
 #define NEWIntervalBigFloat(q)  ((q)=(IntervalBigFloat)MALLOC(sizeof(struct oIntervalBigFloat)),\  #define NEWIntervalBigFloat(q)  ((q)=(IntervalBigFloat)MALLOC(sizeof(struct oIntervalBigFloat)),\
                                         OID(q)=O_N,NID(q)=N_IntervalBigFloat)            OID(q)=O_N,NID(q)=N_IntervalBigFloat)
 #define MKItvP(a,b,c)   (NEWItvP(c),(INF(c)=(a),SUP(c)=(b)))  #define MKItvP(a,b,c)  (NEWItvP(c),(INF(c)=(a),SUP(c)=(b)))
 #define MKIntervalDouble(a,b,c) if((zerorewrite) && ((a)<=0.0) && ((b)>=0.0)) (c)=0;\  #define MKIntervalDouble(a,b,c)  if((zerorewrite) && ((a)<=0.0) && ((b)>=0.0)) (c)=0;\
                         else (NEWIntervalDouble(c),(INF(c)=(a),SUP(c)=(b)))        else (NEWIntervalDouble(c),(INF(c)=(a),SUP(c)=(b)))
 #define MKIntervalQuad(a,b,c)   (NEWIntervalQuad(c),(INF(c)=(a),SUP(c)=(b)))  #define MKIntervalQuad(a,b,c)  (NEWIntervalQuad(c),(INF(c)=(a),SUP(c)=(b)))
 #define MKIntervalBigFloat(a,b,c)       (NEWIntervalBigFloat(c),(INF(c)=(a),SUP(c)=(b)))  #define MKIntervalBigFloat(a,b,c)  (NEWIntervalBigFloat(c),(INF(c)=(a),SUP(c)=(b)))
   
 #define ToItvP(a,c)     (NEWItvP(c),INF(c)=(a),SUP(c)=(a))  #define ToItvP(a,c)  (NEWItvP(c),INF(c)=(a),SUP(c)=(a))
 #define ToIntervalDouble(a,c)   (NEWIntervalDouble(c),INF(c)=(ToReal(a)),SUP(c)=(ToReal(a)))  #define ToIntervalDouble(a,c)  (NEWIntervalDouble(c),INF(c)=(ToReal(a)),SUP(c)=(ToReal(a)))
 #define ToIntervalBigFloat(a,c) (NEWIntervalBigFloat(c),INF(c)=(a),SUP(c)=(a))  #define ToIntervalBigFloat(a,c)  (NEWIntervalBigFloat(c),INF(c)=(a),SUP(c)=(a))
   
 #define ITVP(a) (NID(a)==N_IP)  #define ITVP(a) (NID(a)==N_IP)
 #define ITVD(a) (NID(a)==N_IntervalDouble)  #define ITVD(a) (NID(a)==N_IntervalDouble)
Line 203  double  ToRealInf(Num);
Line 203  double  ToRealInf(Num);
 double  RatnToRealUp(Q);  double  RatnToRealUp(Q);
 double  NatToRealUp(N, int *);  double  NatToRealUp(N, int *);
   
 void    double2bf(double, BF *);  void  double2bf(double, BF *);
 double  bf2double(BF);  double  bf2double(BF);
   
 void    itvtois(Itv, Num *, Num *);  void  itvtois(Itv, Num *, Num *);
 void    istoitv(Num, Num, Itv *);  void  istoitv(Num, Num, Itv *);
   
 #if 0  #if 0
 void    additv(Num, Num, Num *);  void    additv(Num, Num, Num *);
Line 241  void    capitvp(Itv, Itv, Itv *);
Line 241  void    capitvp(Itv, Itv, Itv *);
 void    widthitvp(Itv, Num *);  void    widthitvp(Itv, Num *);
 void    distanceitvp(Itv, Itv, Num *);  void    distanceitvp(Itv, Itv, Num *);
   
 void    ToBf(Num, BF *);  void  ToBf(Num, BF *);
 void    double2bf(double, BF *);  void  double2bf(double, BF *);
 double  bf2double(BF);  double  bf2double(BF);
 void    addulp(IntervalBigFloat, IntervalBigFloat *);  void  addulp(IntervalBigFloat, IntervalBigFloat *);
 void    getulp(BF, BF *);  void  getulp(BF, BF *);
   
 void    additvf(IntervalBigFloat, IntervalBigFloat, IntervalBigFloat *);  void    additvf(IntervalBigFloat, IntervalBigFloat, IntervalBigFloat *);
 void    subitvf(IntervalBigFloat, IntervalBigFloat, IntervalBigFloat *);  void    subitvf(IntervalBigFloat, IntervalBigFloat, IntervalBigFloat *);
Line 257  void    pwritvf(Itv, Num, Itv *);
Line 257  void    pwritvf(Itv, Num, Itv *);
 void    pwritv0f(Itv, int, Itv *);  void    pwritv0f(Itv, int, Itv *);
   
 /***    engine/d-itv.c    ***/  /***    engine/d-itv.c    ***/
 double  ToRealDown(Num);  double  ToRealDown(Num);
 double  ToRealUp(Num);  double  ToRealUp(Num);
 void    Num2double(Num, double *, double *);  void  Num2double(Num, double *, double *);
   
 void    additvd(Num, Num, IntervalDouble *);  void    additvd(Num, Num, IntervalDouble *);
 void    subitvd(Num, Num, IntervalDouble *);  void    subitvd(Num, Num, IntervalDouble *);

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>