home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / cgoodies / nsupport.h < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-08  |  3.3 KB  |  120 lines

  1. /***
  2. *    nsupport.h
  3. *
  4. *    Clipper Summer87
  5. *    Definitions and prototypes for floating point support functions.
  6. *
  7. *    Copyright (c) 1988 Nantucket Corp.  All rights reserved.
  8. *
  9. *    CAUTION -- Version dependent information.
  10. */
  11.  
  12. /* defines, typedefs to prevent compiler intrinsics */
  13.  
  14. #ifdef REAL_DOUBLES
  15.  
  16. typedef double XDOUBLE;
  17. #define DV(x)    (x)
  18.  
  19. #else
  20.  
  21. typedef struct
  22. {
  23.     double dval;
  24. } XDOUBLE;
  25.  
  26. #define DV(x)    (x.dval)
  27.  
  28. #endif
  29.  
  30.  
  31. /* defines to translate low level functions into inline ops */
  32.  
  33. #ifdef NUM_INLINE
  34.  
  35. /* relational */
  36. #define _dvlt(x, y)        (DV(x) < DV(y))
  37. #define _dvle(x, y)        (DV(x) <= DV(y))
  38. #define _dveq(x, y)        (DV(x) == DV(y))
  39. #define _dvge(x, y)        (DV(x) >= DV(y))
  40. #define _dvgt(x, y)        (DV(x) > DV(y))
  41. #define _dvne(x, y)        (DV(x) != DV(y))
  42. #define _dvltz(x)        (DV(x) < (double)0)
  43. #define _dveqz(x)        (DV(x) == (double)0)
  44.  
  45. /* ops */
  46. #define _dvadd(x, y)    (DV(x) + DV(y))
  47. #define _dvsub(x, y)    (DV(x) - DV(y))
  48. #define _dvmul(x, y)    (DV(x) * DV(y))
  49. #define _dvdiv(x, y)    (DV(x) / DV(y))
  50.  
  51. #define _dvmod(x, y)    (fmod(DV(x), DV(y)))
  52. #define _dvneg(x)        (-DV(x))
  53. #define _dvabs(x)        (DV(x) < (double)0) ? -DV(x) : DV(x))
  54. #define _dvint(x)        (DV(x) < (double)0) ? ceil(DV(x)) : floor(DV(x)))
  55.  
  56. #define _dvpow(x, y)    (pow(DV(x), DV(y)))
  57. #define _dvlog(x)        (log(DV(x)))
  58. #define _dvsqr(x)        (sqrt(DV(x)))
  59. #define _dvexp(x)        (exp(DV(x)))
  60.  
  61. /* conversions */
  62. #define _dvtoq(x)        ((quant)DV(x))
  63. #define _dvtoi(x)        ((int)DV(x))
  64. #define _dvtol(x)        ((long)DV(x))
  65. #define _dvfmq(x)        ((double)(x))
  66. #define _dvfmi(x)        ((double)(x))
  67. #define _dvfml(x)        ((double)(x))
  68.  
  69. #else
  70.  
  71. /* relational */
  72. extern Boolean far cdecl _dvlt(XDOUBLE, XDOUBLE);
  73. extern Boolean far cdecl _dvle(XDOUBLE, XDOUBLE);
  74. extern Boolean far cdecl _dveq(XDOUBLE, XDOUBLE);
  75. extern Boolean far cdecl _dvge(XDOUBLE, XDOUBLE);
  76. extern Boolean far cdecl _dvgt(XDOUBLE, XDOUBLE);
  77. extern Boolean far cdecl _dvne(XDOUBLE, XDOUBLE);
  78. extern Boolean far cdecl _dvltz(XDOUBLE);
  79. extern Boolean far cdecl _dveqz(XDOUBLE);
  80.  
  81. /* ops */
  82. extern XDOUBLE far cdecl _dvadd(XDOUBLE, XDOUBLE);
  83. extern XDOUBLE far cdecl _dvsub(XDOUBLE, XDOUBLE);
  84. extern XDOUBLE far cdecl _dvmul(XDOUBLE, XDOUBLE);
  85. extern XDOUBLE far cdecl _dvdiv(XDOUBLE, XDOUBLE);
  86.  
  87. extern XDOUBLE far cdecl _dvmod(XDOUBLE, XDOUBLE);
  88. extern XDOUBLE far cdecl _dvneg(XDOUBLE);
  89. extern XDOUBLE far cdecl _dvabs(XDOUBLE);
  90. extern XDOUBLE far cdecl _dvint(XDOUBLE);
  91.  
  92. extern XDOUBLE far cdecl _dvpow(XDOUBLE, XDOUBLE);
  93. extern XDOUBLE far cdecl _dvlog(XDOUBLE);
  94. extern XDOUBLE far cdecl _dvsqr(XDOUBLE);
  95. extern XDOUBLE far cdecl _dvexp(XDOUBLE);
  96.  
  97. /* conversions */
  98. extern quant far cdecl _dvtoq(XDOUBLE);
  99. extern int far cdecl _dvtoi(XDOUBLE);
  100. extern long far cdecl _dvtol(XDOUBLE);
  101. extern XDOUBLE far cdecl _dvfmq(quant);
  102. extern XDOUBLE far cdecl _dvfmi(int);
  103. extern XDOUBLE far cdecl _dvfml(long);
  104.  
  105. #endif
  106.  
  107.  
  108. /* these are always extern */
  109. extern void far cdecl _dvinit(void);
  110. extern XDOUBLE far cdecl _dvrnd(XDOUBLE, int);
  111.  
  112. extern XDOUBLE far cdecl _dvfma(byte far *, quant);
  113. extern void far cdecl _aton(byte far *, quant, XDOUBLE far *, quant far *, quant far *);
  114. extern void far cdecl _ntoa(XDOUBLE, quant, quant, byte far *);
  115.  
  116. /* extern void far cdecl _dntoa(byte far *, XDOUBLE, quant, quant); */
  117. #define _dntoa(buf, dnum, len, dec) _ntoa(dnum, len, dec, buf)
  118. extern void far cdecl _lntoa(byte far *, long, quant, quant);
  119.  
  120.