version 1.4, 2002/01/04 17:01:40 |
version 1.5, 2002/01/08 04:14:38 |
|
|
/* |
/* |
* $OpenXM: OpenXM_contrib2/asir2000/include/interval.h,v 1.3 2001/03/19 01:13:50 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/include/interval.h,v 1.4 2002/01/04 17:01:40 saito Exp $ |
*/ |
*/ |
#ifndef _INTERVAL_H |
#ifndef _INTERVAL_H |
#define _INTERVAL_H |
#define _INTERVAL_H |
Line 99 static char *Interval_dummy; |
|
Line 99 static char *Interval_dummy; |
|
#undef N_GFPN |
#undef N_GFPN |
#undef N_GFS |
#undef N_GFS |
#undef N_GFSN |
#undef N_GFSN |
#define N_IP (N_B+1) |
#define N_NEXT_B (N_B+1) |
#define N_ID (N_B+2) |
#define N_Quad (N_NEXT_B) |
#define N_IT (N_B+3) |
#define N_IP (N_NEXT_B+1) |
#define N_IF (N_B+4) |
#define N_IntervalDouble (N_NEXT_B+2) |
#define N_PRE_C N_IF |
#define N_IntervalQuad (N_NEXT_B+3) |
#define N_C (N_B+5) |
#define N_IntervalBigFloat (N_NEXT_B+4) |
#define N_M (N_B+6) |
#define N_PRE_C N_IntervalBigFloat |
#define N_LM (N_B+7) |
#define N_C (N_NEXT_B+5) |
#define N_GF2N (N_B+8) |
#define N_M (N_NEXT_B+6) |
#define N_GFPN (N_B+9) |
#define N_LM (N_NEXT_B+7) |
#define N_GFS (N_B+10) |
#define N_GF2N (N_NEXT_B+8) |
#define N_GFSN (N_B+11) |
#define N_GFPN (N_NEXT_B+9) |
|
#define N_GFS (N_NEXT_B+10) |
|
#define N_GFSN (N_NEXT_B+11) |
|
|
/* data structures */ |
/* data structures */ |
struct oItv { |
struct oItv { |
|
|
|
|
typedef struct oItv *Itv; |
typedef struct oItv *Itv; |
|
|
struct oItvD { |
struct oIntervalDouble { |
short id; |
short id; |
char nid; |
char nid; |
char pad; |
char pad; |
|
|
double sup; |
double sup; |
}; |
}; |
|
|
typedef struct oItvD *ItvD; |
typedef struct oIntervalDouble *IntervalDouble; |
|
|
struct oforth { |
struct oforth { |
short sign; |
short sign; |
|
|
|
|
typedef struct oforth *forth; |
typedef struct oforth *forth; |
|
|
struct oItvT { |
struct oIntervalQuad { |
short id; |
short id; |
char nid; |
char nid; |
char pad; |
char pad; |
|
|
forth sup; |
forth sup; |
}; |
}; |
|
|
typedef struct oItvT *ItvT; |
typedef struct oIntervalQuad *IntervalQuad; |
|
|
struct oItvF { |
struct oIntervalBigFloat { |
short id; |
short id; |
char nid; |
char nid; |
char pad; |
char pad; |
|
|
BF sup; |
BF sup; |
}; |
}; |
|
|
typedef struct oItvF *ItvF; |
typedef struct oIntervalBigFloat *IntervalBigFloat; |
|
|
extern int zerorewrite; |
extern int zerorewrite; |
|
|
Line 170 extern int zerorewrite; |
|
Line 172 extern int zerorewrite; |
|
|
|
#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 NEWItvD(q) ((q)=(ItvD)MALLOC(sizeof(struct oItvD)),\ |
#define NEWIntervalDouble(q) ((q)=(IntervalDouble)MALLOC(sizeof(struct oIntervalDouble)),\ |
OID(q)=O_N,NID(q)=N_ID) |
OID(q)=O_N,NID(q)=N_IntervalDouble) |
#define NEWItvT(q) ((q)=(ItvD)MALLOC(sizeof(struct oItvT)),\ |
#define NEWIntervalQuad(q) ((q)=(IntervalDouble)MALLOC(sizeof(struct oIntervalQuad)),\ |
OID(q)=O_N,NID(q)=N_IT) |
OID(q)=O_N,NID(q)=N_IntervalQuad) |
#define NEWItvF(q) ((q)=(ItvF)MALLOC(sizeof(struct oItvF)),\ |
#define NEWIntervalBigFloat(q) ((q)=(IntervalBigFloat)MALLOC(sizeof(struct oIntervalBigFloat)),\ |
OID(q)=O_N,NID(q)=N_IF) |
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 MKItvD(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 (NEWItvD(c),(INF(c)=(a),SUP(c)=(b))) |
else (NEWIntervalDouble(c),(INF(c)=(a),SUP(c)=(b))) |
#define MKItvT(a,b,c) (NEWItvT(c),(INF(c)=(a),SUP(c)=(b))) |
#define MKIntervalQuad(a,b,c) (NEWIntervalQuad(c),(INF(c)=(a),SUP(c)=(b))) |
#define MKItvF(a,b,c) (NEWItvF(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 ToItvD(a,c) (NEWItvD(c),INF(c)=(ToReal(a)),SUP(c)=(ToReal(a))) |
#define ToIntervalDouble(a,c) (NEWIntervalDouble(c),INF(c)=(ToReal(a)),SUP(c)=(ToReal(a))) |
#define ToItvF(a,c) (NEWItvF(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_ID) |
#define ITVD(a) (NID(a)==N_IntervalDouble) |
#define ITVT(a) (NID(a)==N_IT) |
#define ITVQ(a) (NID(a)==N_IntervalQuad) |
#define ITVF(a) (NID(a)==N_IF) |
#define ITVF(a) (NID(a)==N_IntervalBigFloat) |
|
|
/*** engine/itv.c ***/ |
/*** engine/itv.c ***/ |
double ToRealSup(Num); |
double ToRealSup(Num); |
Line 238 void distanceitvp(Itv, Itv, Num *); |
|
Line 240 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(ItvF, ItvF *); |
void addulp(IntervalBigFloat, IntervalBigFloat *); |
void getulp(BF, BF *); |
void getulp(BF, BF *); |
|
|
void additvf(ItvF, ItvF, ItvF *); |
void additvf(IntervalBigFloat, IntervalBigFloat, IntervalBigFloat *); |
void subitvf(ItvF, ItvF, ItvF *); |
void subitvf(IntervalBigFloat, IntervalBigFloat, IntervalBigFloat *); |
void mulitvf(ItvF, ItvF, ItvF *); |
void mulitvf(IntervalBigFloat, IntervalBigFloat, IntervalBigFloat *); |
void divitvf(ItvF, ItvF, ItvF *); |
void divitvf(IntervalBigFloat, IntervalBigFloat, IntervalBigFloat *); |
void chsgnitvf(Itv, Itv *); |
void chsgnitvf(Itv, Itv *); |
int cmpitvf(Itv, Itv); |
int cmpitvf(Itv, Itv); |
void pwritvf(Itv, Num, Itv *); |
void pwritvf(Itv, Num, Itv *); |
Line 255 double ToRealDown(Num); |
|
Line 257 double ToRealDown(Num); |
|
double ToRealUp(Num); |
double ToRealUp(Num); |
void Num2double(Num, double *, double *); |
void Num2double(Num, double *, double *); |
|
|
void additvd(Num, Num, ItvD *); |
void additvd(Num, Num, IntervalDouble *); |
void subitvd(Num, Num, ItvD *); |
void subitvd(Num, Num, IntervalDouble *); |
void mulitvd(Num, Num, ItvD *); |
void mulitvd(Num, Num, IntervalDouble *); |
void divitvd(Num, Num, ItvD *); |
void divitvd(Num, Num, IntervalDouble *); |
void chsgnitvd(ItvD, ItvD *); |
void chsgnitvd(IntervalDouble, IntervalDouble *); |
int cmpitvd(ItvD, ItvD); |
int cmpitvd(IntervalDouble, IntervalDouble); |
void pwritvd(Num, Num, ItvD *); |
void pwritvd(Num, Num, IntervalDouble *); |
void pwritv0d(ItvD, int, ItvD *); |
void pwritv0d(IntervalDouble, int, IntervalDouble *); |
void miditvd(ItvD, Num *); |
void miditvd(IntervalDouble, Num *); |
void cupitvd(ItvD, ItvD, ItvD *); |
void cupitvd(IntervalDouble, IntervalDouble, IntervalDouble *); |
void capitvd(ItvD, ItvD, ItvD *); |
void capitvd(IntervalDouble, IntervalDouble, IntervalDouble *); |
void widthitvd(ItvD, Num *); |
void widthitvd(IntervalDouble, Num *); |
void absitvd(ItvD, Num *); |
void absitvd(IntervalDouble, Num *); |
void distanceitvd(ItvD, ItvD, Num *); |
void distanceitvd(IntervalDouble, IntervalDouble, Num *); |
|
|
#endif /* end of INTERVAL */ |
#endif /* end of INTERVAL */ |
#endif /* end of _INTERVAL_H */ |
#endif /* end of _INTERVAL_H */ |