home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / math.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  11KB  |  355 lines

  1.  
  2. /*  math.h
  3.  
  4.     Definitions for the math floating point package.
  5.  
  6. */
  7.  
  8. /*
  9.  *      C/C++ Run Time Library - Version 10.0
  10.  *
  11.  *      Copyright (c) 1987, 2000 by Inprise Corporation
  12.  *      All Rights Reserved.
  13.  *
  14.  */
  15.  
  16. /* $Revision:   9.12  $ */
  17.  
  18. #ifndef  __MATH_H
  19. #define  __MATH_H
  20.  
  21. #if !defined(___STDDEF_H)
  22. #include <_stddef.h>
  23. #endif
  24.  
  25. #if !defined(RC_INVOKED)
  26.  
  27. #if defined(__STDC__)
  28. #pragma warn -nak
  29. #endif
  30.  
  31. #pragma pack(push, 1)
  32.  
  33. #endif  /* !RC_INVOKED */
  34.  
  35.  
  36. #if !defined(__STDC__) /* NON-ANSI */
  37.  
  38. #ifdef __cplusplus
  39.   extern "C" {
  40. #endif
  41.  
  42. /* Intrinsic functions listed before any namespace */
  43.  
  44. double      _RTLENTRY __sin__ (double __x);
  45. double      _RTLENTRY __cos__ (double __x);
  46. long double _RTLENTRY __cosl__(long double __x);
  47. long double _RTLENTRY __sinl__(long double __x);
  48. int         _RTLENTRY __abs__ (int);
  49.  
  50. /* matherr and struct _exception must not be availible in __STDC__ nor
  51.    can they be in namespace std since user's won't be able to override them
  52.    there.
  53. */
  54.  
  55. #ifndef __STDC__
  56. /* In "C" mode, (but not in standard C mode) we can allow the old name of
  57.    'exception' for this structure.
  58.  */
  59. #ifndef __cplusplus
  60. #define _exception exception
  61. #endif
  62. #endif /* __STDC__ */
  63.  
  64.  
  65.  
  66. struct  _exception
  67. {
  68.     int type;
  69.     char   _FAR *name;
  70.     double  arg1, arg2, retval;
  71. };
  72.  
  73. struct  _exceptionl
  74. {
  75.     int type;
  76.     char   _FAR *name;
  77.     long double  arg1, arg2, retval;
  78. };
  79.  
  80. typedef enum
  81. {
  82.     DOMAIN = 1,    /* argument domain error -- log (-1)        */
  83.     SING,          /* argument singularity  -- pow (0,-2))     */
  84.     OVERFLOW,      /* overflow range error  -- exp (1000)      */
  85.     UNDERFLOW,     /* underflow range error -- exp (-1000)     */
  86.     TLOSS,         /* total loss of significance -- sin(10e70) */
  87.     PLOSS,         /* partial loss of signif. -- not used      */
  88.     STACKFAULT     /* floating point unit stack overflow       */
  89. }   _mexcep;
  90.  
  91. int         _RTLENTRY          _matherr(struct _exception  *__e);
  92. int         _RTLENTRY          _matherrl(struct _exceptionl *__e);
  93.  
  94. #ifdef __cplusplus
  95. }  // extern "C"
  96. #endif
  97.  
  98. #ifdef __cplusplus
  99.     /* use class complex instead of _cabs in C++ (now in STL 2.0) */
  100. #else
  101. struct complex      /* as used by "_cabs" function */
  102. {
  103.     double  x, y;
  104. };
  105.  
  106. struct _complexl    /* as used by "_cabsl" function */
  107. {
  108.     long double  x, y;
  109. };
  110.  
  111. #define cabs(z)     (hypot  ((z).x, (z).y))
  112. #define cabsl(z)    (hypotl ((z).x, (z).y))
  113. #endif /* __cplusplus */
  114. #endif /* NON-ANSI */
  115.  
  116. #ifdef __cplusplus
  117.   namespace std {
  118. #endif
  119.  
  120.  
  121. /* Constants rounded for 21 decimals. */
  122. #define M_E         2.71828182845904523536
  123. #define M_LOG2E     1.44269504088896340736
  124. #define M_LOG10E    0.434294481903251827651
  125. #define M_LN2       0.693147180559945309417
  126. #define M_LN10      2.30258509299404568402
  127. #define M_PI        3.14159265358979323846
  128. #define M_PI_2      1.57079632679489661923
  129. #define M_PI_4      0.785398163397448309616
  130. #define M_1_PI      0.318309886183790671538
  131. #define M_2_PI      0.636619772367581343076
  132. #define M_1_SQRTPI  0.564189583547756286948
  133. #define M_2_SQRTPI  1.12837916709551257390
  134. #define M_SQRT2     1.41421356237309504880
  135. #define M_SQRT_2    0.707106781186547524401
  136.  
  137. #define EDOM    33      /* Math argument */
  138. #define ERANGE  34      /* Result too large */
  139.  
  140.  
  141. #ifdef __cplusplus
  142. extern "C" {
  143. #endif
  144.  
  145. #define HUGE_VAL    _huge_dble
  146. extern double _RTLENTRY _EXPDATA _huge_dble;
  147. #define _LHUGE_VAL   _huge_ldble
  148. extern long double _RTLENTRY _EXPDATA _huge_ldble;
  149.  
  150. double      _RTLENTRY _EXPFUNC acos    (double __x);
  151. double      _RTLENTRY _EXPFUNC asin    (double __x);
  152. double      _RTLENTRY _EXPFUNC atan    (double __x);
  153. double      _RTLENTRY _EXPFUNC atan2   (double __y, double __x);
  154. double      _RTLENTRY _EXPFUNC ceil    (double __x);
  155. double      _RTLENTRY _EXPFUNC cos     (double __x);
  156. double      _RTLENTRY _EXPFUNC cosh    (double __x);
  157. double      _RTLENTRY _EXPFUNC exp     (double __x);
  158. double      _RTLENTRY _EXPFUNC fabs    (double __x);
  159. double      _RTLENTRY _EXPFUNC floor   (double __x);
  160. double      _RTLENTRY _EXPFUNC fmod    (double __x, double __y);
  161. double      _RTLENTRY _EXPFUNC frexp   (double __x, int * __exponent);
  162. double      _RTLENTRY _EXPFUNC ldexp   (double __x, int __exponent);
  163. double      _RTLENTRY _EXPFUNC log     (double __x);
  164. double      _RTLENTRY _EXPFUNC log10   (double __x);
  165. double      _RTLENTRY _EXPFUNC modf    (double __x, double * __ipart);
  166. double      _RTLENTRY _EXPFUNC pow     (double __x, double __y);
  167. double      _RTLENTRY _EXPFUNC sin     (double __x);
  168. double      _RTLENTRY _EXPFUNC sinh    (double __x);
  169. double      _RTLENTRY _EXPFUNC sqrt    (double __x);
  170. double      _RTLENTRY _EXPFUNC tan     (double __x);
  171. double      _RTLENTRY _EXPFUNC tanh    (double __x);
  172.  
  173. long double _RTLENTRY _EXPFUNC acosl  (long double __x);
  174. long double _RTLENTRY _EXPFUNC asinl  (long double __x);
  175. long double _RTLENTRY _EXPFUNC atan2l (long double __x, long double __y);
  176. long double _RTLENTRY _EXPFUNC atanl  (long double __x);
  177. long double _RTLENTRY _EXPFUNC ceill  (long double __x);
  178. long double _RTLENTRY _EXPFUNC coshl  (long double __x);
  179. long double _RTLENTRY _EXPFUNC cosl   (long double __x);
  180. long double _RTLENTRY _EXPFUNC expl   (long double __x);
  181. long double _RTLENTRY _EXPFUNC fabsl  (long double __x);
  182. long double _RTLENTRY _EXPFUNC floorl (long double __x);
  183. long double _RTLENTRY _EXPFUNC fmodl  (long double __x, long double __y);
  184. long double _RTLENTRY _EXPFUNC frexpl (long double __x, int * __exponent);
  185. long double _RTLENTRY _EXPFUNC ldexpl (long double __x, int __exponent);
  186. long double _RTLENTRY _EXPFUNC log10l (long double __x);
  187. long double _RTLENTRY _EXPFUNC logl   (long double __x);
  188. long double _RTLENTRY _EXPFUNC modfl  (long double __x, long double * __ipart);
  189. long double _RTLENTRY _EXPFUNC powl   (long double __x, long double __y);
  190. long double _RTLENTRY _EXPFUNC sinhl  (long double __x);
  191. long double _RTLENTRY _EXPFUNC sinl   (long double __x);
  192. long double _RTLENTRY _EXPFUNC sqrtl  (long double __x);
  193. long double _RTLENTRY _EXPFUNC tanhl  (long double __x);
  194. long double _RTLENTRY _EXPFUNC tanl   (long double __x);
  195.  
  196.  
  197. double      _RTLENTRY _EXPFUNC atof    (const char * __s);
  198.  
  199. #if !defined(__STDC__) /* NON_ANSI */
  200.  
  201. #if !defined(__ABS_DEFINED)
  202. #define __ABS_DEFINED
  203. #ifdef __cplusplus
  204. inline int _RTLENTRY  abs(int __x) { return __abs__(__x); }
  205. #else
  206. int         _RTLENTRYF _EXPFUNC abs(int __x);
  207. #  define abs(x)   __abs__(x)
  208. #endif
  209. #endif /* __ABS_DEFINED */
  210.  
  211. long        _RTLENTRY _EXPFUNC labs    (long __x);
  212. double      _RTLENTRY _EXPFUNC pow10   (int __p);
  213.  
  214. long double _RTLENTRY _EXPFUNC _atold  (const char * __s);
  215.  
  216.  
  217. double      _RTLENTRY _EXPFUNC hypot   (double __x, double __y);
  218. double      _RTLENTRY _EXPFUNC poly    (double __x, int __degree, double __coeffs []);
  219. long double _RTLENTRY _EXPFUNC hypotl  (long double __x, long double __y);
  220. long double _RTLENTRY _EXPFUNC polyl   (long double __x, int __degree, long double __coeffs []);
  221. long double _RTLENTRY _EXPFUNC pow10l  (int __p);
  222.  
  223. #if defined (_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS >= 64)
  224. __int64     _RTLENTRY _EXPFUNC   _atoi64(const char * __s);
  225. char *      _RTLENTRY   _EXPFUNC _i64toa(__int64 __value, char *__strP, int __radix);
  226. char *      _RTLENTRY   _EXPFUNC _ui64toa(unsigned __int64 __value, char *__strP, int __radix);
  227. __int64     _RTLENTRY _EXPFUNC   _wtoi64(const wchar_t * __s);
  228. wchar_t *   _RTLENTRY   _EXPFUNC _i64tow(__int64 __value, wchar_t *__strP, int __radix);
  229. wchar_t *   _RTLENTRY   _EXPFUNC _ui64tow(unsigned __int64 __value, wchar_t *__strP, int __radix);
  230. #endif
  231. double      _RTLENTRY _EXPFUNC   _wtof(const wchar_t * __s);
  232. int         _RTLENTRY _EXPFUNC   _wtoi(const wchar_t * __s);
  233. long        _RTLENTRY _EXPFUNC   _wtol(const wchar_t * __s);
  234. long double _RTLENTRY _EXPFUNC   _wtold(const wchar_t * __s);
  235.  
  236. #endif  /* !__STDC__ */
  237.  
  238. #ifdef __cplusplus
  239. } // extern "C"
  240. } // std
  241. #endif /* __cplusplus */
  242.  
  243. #if !defined(RC_INVOKED)
  244.  
  245. /* restore default packing */
  246. #pragma pack(pop)
  247.  
  248. #if defined(__STDC__)
  249. #pragma warn .nak
  250. #endif
  251.  
  252. #endif  /* !RC_INVOKED */
  253. #endif  /* __MATH_H */
  254.  
  255. #if defined(__cplusplus) && !defined(__USING_CNAME__) && !defined(__MATH_H_USING_LIST)
  256. #define __MATH_H_USING_LIST
  257.     using std::_huge_dble;
  258.     using std::_huge_ldble;
  259.     using std::acos;
  260.     using std::asin;
  261.     using std::atan;
  262.     using std::atan2;
  263.     using std::ceil;
  264.     using std::cosh;
  265.     using std::exp;
  266.     using std::fabs;
  267.     using std::floor;
  268.     using std::fmod;
  269.     using std::frexp;
  270.     using std::ldexp;
  271.     using std::log;
  272.     using std::log10;
  273.     using std::modf;
  274.     using std::pow;
  275.     using std::sinh;
  276.     using std::sqrt;
  277.     using std::tan;
  278.     using std::tanh;
  279.     using std::acosl;
  280.     using std::asinl;
  281.     using std::atan2l;
  282.     using std::atanl;
  283.     using std::ceill;
  284.     using std::coshl;
  285.     using std::expl;
  286.     using std::fabsl;
  287.     using std::floorl;
  288.     using std::fmodl;
  289.     using std::frexpl;
  290.     using std::ldexpl;
  291.     using std::log10l;
  292.     using std::logl;
  293.     using std::modfl;
  294.     using std::powl;
  295.     using std::sinhl;
  296.     using std::sqrtl;
  297.     using std::tanhl;
  298.     using std::tanl;
  299.     using std::atof;
  300.  
  301. /*
  302.    Handle intrinsics specially.  If intrinsics are on, the compiler creates
  303.    a macro of the normal function mapping to the __ intrinsic version, ie:
  304.      #define strcpy __strcpy__
  305.    Thus, we can test the normal name as a macro to see if it's defined, and
  306.    only preform a using statement if it's not an intrinsic
  307. */
  308.  
  309. #   ifndef sin
  310.       using std::sin;
  311. #   endif // ifndef sin
  312. #   ifndef cos
  313.       using std::cos;
  314. #   endif // ifndef cos
  315. #   ifndef sinl
  316.       using std::sinl;
  317. #   endif // ifndef sinl
  318. #   ifndef cosl
  319.       using std::cosl;
  320. #   endif // ifndef cosl
  321.  
  322. # if !defined(__STDC__) /* NON_ANSI */
  323. #   ifndef abs
  324.       using std::abs;
  325. #   endif // ifndef abs
  326.  
  327.     using std::labs;
  328.     using std::pow10;
  329.     using std::_atold;
  330.     using std::hypot;
  331.     using std::poly;
  332.     using std::hypotl;
  333.     using std::polyl;
  334.     using std::pow10l;
  335.  
  336. # if defined (_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS >= 64)
  337.     using std::_atoi64;
  338.     using std::_i64toa;
  339.     using std::_ui64toa;
  340.     using std::_wtoi64;
  341.     using std::_i64tow;
  342.     using std::_ui64tow;
  343.     using std::_wtof;
  344.     using std::_wtoi;
  345.     using std::_wtol;
  346.     using std::_wtold;
  347. # endif // _INTEGRAL_MAX_BITS
  348. # endif // !__STDC__
  349. #endif /* __USING_CNAME__ */
  350.  
  351. #if defined(_FM_USE_FASTMATH) && !defined(__FASTMATH_H)
  352. #   include <fastmath.h>
  353. #endif /* _FM_USE_FASTMATH */
  354.  
  355.