home *** CD-ROM | disk | FTP | other *** search
- /***
- * nsupport.h
- *
- * Clipper Summer87
- * Definitions and prototypes for floating point support functions.
- *
- * Copyright (c) 1988 Nantucket Corp. All rights reserved.
- *
- * CAUTION -- Version dependent information.
- */
-
- /* defines, typedefs to prevent compiler intrinsics */
-
- #ifdef REAL_DOUBLES
-
- typedef double XDOUBLE;
- #define DV(x) (x)
-
- #else
-
- typedef struct
- {
- double dval;
- } XDOUBLE;
-
- #define DV(x) (x.dval)
-
- #endif
-
-
- /* defines to translate low level functions into inline ops */
-
- #ifdef NUM_INLINE
-
- /* relational */
- #define _dvlt(x, y) (DV(x) < DV(y))
- #define _dvle(x, y) (DV(x) <= DV(y))
- #define _dveq(x, y) (DV(x) == DV(y))
- #define _dvge(x, y) (DV(x) >= DV(y))
- #define _dvgt(x, y) (DV(x) > DV(y))
- #define _dvne(x, y) (DV(x) != DV(y))
- #define _dvltz(x) (DV(x) < (double)0)
- #define _dveqz(x) (DV(x) == (double)0)
-
- /* ops */
- #define _dvadd(x, y) (DV(x) + DV(y))
- #define _dvsub(x, y) (DV(x) - DV(y))
- #define _dvmul(x, y) (DV(x) * DV(y))
- #define _dvdiv(x, y) (DV(x) / DV(y))
-
- #define _dvmod(x, y) (fmod(DV(x), DV(y)))
- #define _dvneg(x) (-DV(x))
- #define _dvabs(x) (DV(x) < (double)0) ? -DV(x) : DV(x))
- #define _dvint(x) (DV(x) < (double)0) ? ceil(DV(x)) : floor(DV(x)))
-
- #define _dvpow(x, y) (pow(DV(x), DV(y)))
- #define _dvlog(x) (log(DV(x)))
- #define _dvsqr(x) (sqrt(DV(x)))
- #define _dvexp(x) (exp(DV(x)))
-
- /* conversions */
- #define _dvtoq(x) ((quant)DV(x))
- #define _dvtoi(x) ((int)DV(x))
- #define _dvtol(x) ((long)DV(x))
- #define _dvfmq(x) ((double)(x))
- #define _dvfmi(x) ((double)(x))
- #define _dvfml(x) ((double)(x))
-
- #else
-
- /* relational */
- extern Boolean far cdecl _dvlt(XDOUBLE, XDOUBLE);
- extern Boolean far cdecl _dvle(XDOUBLE, XDOUBLE);
- extern Boolean far cdecl _dveq(XDOUBLE, XDOUBLE);
- extern Boolean far cdecl _dvge(XDOUBLE, XDOUBLE);
- extern Boolean far cdecl _dvgt(XDOUBLE, XDOUBLE);
- extern Boolean far cdecl _dvne(XDOUBLE, XDOUBLE);
- extern Boolean far cdecl _dvltz(XDOUBLE);
- extern Boolean far cdecl _dveqz(XDOUBLE);
-
- /* ops */
- extern XDOUBLE far cdecl _dvadd(XDOUBLE, XDOUBLE);
- extern XDOUBLE far cdecl _dvsub(XDOUBLE, XDOUBLE);
- extern XDOUBLE far cdecl _dvmul(XDOUBLE, XDOUBLE);
- extern XDOUBLE far cdecl _dvdiv(XDOUBLE, XDOUBLE);
-
- extern XDOUBLE far cdecl _dvmod(XDOUBLE, XDOUBLE);
- extern XDOUBLE far cdecl _dvneg(XDOUBLE);
- extern XDOUBLE far cdecl _dvabs(XDOUBLE);
- extern XDOUBLE far cdecl _dvint(XDOUBLE);
-
- extern XDOUBLE far cdecl _dvpow(XDOUBLE, XDOUBLE);
- extern XDOUBLE far cdecl _dvlog(XDOUBLE);
- extern XDOUBLE far cdecl _dvsqr(XDOUBLE);
- extern XDOUBLE far cdecl _dvexp(XDOUBLE);
-
- /* conversions */
- extern quant far cdecl _dvtoq(XDOUBLE);
- extern int far cdecl _dvtoi(XDOUBLE);
- extern long far cdecl _dvtol(XDOUBLE);
- extern XDOUBLE far cdecl _dvfmq(quant);
- extern XDOUBLE far cdecl _dvfmi(int);
- extern XDOUBLE far cdecl _dvfml(long);
-
- #endif
-
-
- /* these are always extern */
- extern void far cdecl _dvinit(void);
- extern XDOUBLE far cdecl _dvrnd(XDOUBLE, int);
-
- extern XDOUBLE far cdecl _dvfma(byte far *, quant);
- extern void far cdecl _aton(byte far *, quant, XDOUBLE far *, quant far *, quant far *);
- extern void far cdecl _ntoa(XDOUBLE, quant, quant, byte far *);
-
- /* extern void far cdecl _dntoa(byte far *, XDOUBLE, quant, quant); */
- #define _dntoa(buf, dnum, len, dec) _ntoa(dnum, len, dec, buf)
- extern void far cdecl _lntoa(byte far *, long, quant, quant);
-