Listing 5: Header file machars.h sets arithmetic type & NAME macro
1: /* machars.h */
2:
3: # if defined(__MACHARS_H__)
4: # /* Do Nothing */
5: # else
6: # define __MACHARS_H__
7:
8: #ifdef __cplusplus
9: extern "C" {
10: #endif
11:
12: /* The NAME() macro used hereinafter is due to Plauger */
13:
14: # if defined(QFLT)
15: typedef qfloat TYPE;
16: # define NAME(F) x##F
17: # elif defined(FLT)
18: typedef float TYPE;
19: # define NAME(x) x##f
20: # elif defined(DBL)
21: typedef double TYPE;
22: # define NAME(x) x
23: # else
24: typedef long double TYPE;
25: # define NAME(x) x##l
26: # endif
27:
28: typedef struct MacharStru
29: {
30: short FracDigs; /* No. Digits in f.p. Fraction */
31: short Radix; /* Radix of f.p. Representation */
32: short Rounds; /* TRUE if f.p. Addition Rounds */
33: TYPE EpsNeg;
34: TYPE Eps;
35: TYPE Max;
36: TYPE Min;
37: short ExpDigits;
38: short MaxExp;
39: short MinExp;
40: short NumGuard; /* No. Mult. Guard Digits */
41: }
42: MACHAR_STRU;
43:
44: extern MACHAR_STRU GetMachar(void);
45: extern MACHAR_STRU GetExtCh(void);
46:
47:
48: #ifdef __cplusplus
49: }
50: #endif
51:
52: # endif /* <<__MACHARS_H__>>*/
/* End of File */