Subversion Repositories Kolibri OS

Rev

Rev 1693 | Blame | Last modification | View Log | Download | RSS feed

  1. #ifndef  _MATH_H_
  2.  
  3. #define  _MATH_H_
  4.  
  5. #include <sys/reent.h>
  6. #include <machine/ieeefp.h>
  7. #include "_ansi.h"
  8.  
  9. _BEGIN_STD_C
  10.  
  11. /* __dmath, __fmath, and __ldmath are only here for backwards compatibility
  12.  * in case any code used them.  They are no longer used by Newlib, itself,
  13.  * other than legacy.  */
  14. union __dmath
  15. {
  16.   double d;
  17.   __ULong i[2];
  18. };
  19.  
  20. union __fmath
  21. {
  22.   float f;
  23.   __ULong i[1];
  24. };
  25.  
  26. #if defined(_HAVE_LONG_DOUBLE)
  27. union __ldmath
  28. {
  29.   long double ld;
  30.   __ULong i[4];
  31. };
  32. #endif
  33.  
  34. /* Natural log of 2 */
  35. #define _M_LN2        0.693147180559945309417
  36.  
  37. #if defined(__GNUC__) && \
  38.   ( (__GNUC__ >= 4) || \
  39.     ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 3) ) )
  40.  
  41.  /* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values.  */
  42.  
  43. # ifndef HUGE_VAL
  44. #  define HUGE_VAL (__builtin_huge_val())
  45. # endif
  46.  
  47. # ifndef HUGE_VALF
  48. #  define HUGE_VALF (__builtin_huge_valf())
  49. # endif
  50.  
  51. # ifndef HUGE_VALL
  52. #  define HUGE_VALL (__builtin_huge_vall())
  53. # endif
  54.  
  55. # ifndef INFINITY
  56. #  define INFINITY (__builtin_inff())
  57. # endif
  58.  
  59. # ifndef NAN
  60. #  define NAN (__builtin_nanf(""))
  61. # endif
  62.  
  63. #else /* !gcc >= 3.3  */
  64.  
  65.  /*      No builtins.  Use fixed defines instead.  (All 3 HUGE plus the INFINITY
  66.   * and NAN macros are required to be constant expressions.  Using a variable--
  67.   * even a static const--does not meet this requirement, as it cannot be
  68.   * evaluated at translation time.)
  69.   *      The infinities are done using numbers that are far in excess of
  70.   * something that would be expected to be encountered in a floating-point
  71.   * implementation.  (A more certain way uses values from float.h, but that is
  72.   * avoided because system includes are not supposed to include each other.)
  73.   *      This method might produce warnings from some compilers.  (It does in
  74.   * newer GCCs, but not for ones that would hit this #else.)  If this happens,
  75.   * please report details to the Newlib mailing list.  */
  76.  
  77.  #ifndef HUGE_VAL
  78.   #define HUGE_VAL (1.0e999999999)
  79.  #endif
  80.  
  81.  #ifndef HUGE_VALF
  82.   #define HUGE_VALF (1.0e999999999F)
  83.  #endif
  84.  
  85.  #if !defined(HUGE_VALL)  &&  defined(_HAVE_LONG_DOUBLE)
  86.   #define HUGE_VALL (1.0e999999999L)
  87.  #endif
  88.  
  89.  #if !defined(INFINITY)
  90.   #define INFINITY (HUGE_VALF)
  91.  #endif
  92.  
  93.  #if !defined(NAN)
  94.   #if defined(__GNUC__)  &&  defined(__cplusplus)
  95.     /* Exception:  older g++ versions warn about the divide by 0 used in the
  96.      * normal case (even though older gccs do not).  This trick suppresses the
  97.      * warning, but causes errors for plain gcc, so is only used in the one
  98.      * special case.  */
  99.     static const union { __ULong __i[1]; float __d; } __Nanf = {0x7FC00000};
  100.     #define NAN (__Nanf.__d)
  101.   #else
  102.     #define NAN (0.0F/0.0F)
  103.   #endif
  104.  #endif
  105.  
  106. #endif /* !gcc >= 3.3  */
  107.  
  108. /* Reentrant ANSI C functions.  */
  109.  
  110. #ifndef __math_68881
  111. extern double atan _PARAMS((double));
  112. extern double cos _PARAMS((double));
  113. extern double sin _PARAMS((double));
  114. extern double tan _PARAMS((double));
  115. extern double tanh _PARAMS((double));
  116. extern double frexp _PARAMS((double, int *));
  117. extern double modf _PARAMS((double, double *));
  118. extern double ceil _PARAMS((double));
  119. extern double fabs _PARAMS((double));
  120. extern double floor _PARAMS((double));
  121. #endif /* ! defined (__math_68881) */
  122.  
  123. /* Non reentrant ANSI C functions.  */
  124.  
  125. #ifndef _REENT_ONLY
  126. #ifndef __math_68881
  127. extern double acos _PARAMS((double));
  128. extern double asin _PARAMS((double));
  129. extern double atan2 _PARAMS((double, double));
  130. extern double cosh _PARAMS((double));
  131. extern double sinh _PARAMS((double));
  132. extern double exp _PARAMS((double));
  133. extern double ldexp _PARAMS((double, int));
  134. extern double log _PARAMS((double));
  135. extern double log10 _PARAMS((double));
  136. extern double pow _PARAMS((double, double));
  137. extern double sqrt _PARAMS((double));
  138. extern double fmod _PARAMS((double, double));
  139. #endif /* ! defined (__math_68881) */
  140. #endif /* ! defined (_REENT_ONLY) */
  141.  
  142. #if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L
  143.  
  144. /* ISO C99 types and macros. */
  145.  
  146. #ifndef FLT_EVAL_METHOD
  147. #define FLT_EVAL_METHOD 0
  148. typedef float float_t;
  149. typedef double double_t;
  150. #endif /* FLT_EVAL_METHOD */
  151.  
  152. #define FP_NAN         0
  153. #define FP_INFINITE    1
  154. #define FP_ZERO        2
  155. #define FP_SUBNORMAL   3
  156. #define FP_NORMAL      4
  157.  
  158. #ifndef FP_ILOGB0
  159. # define FP_ILOGB0 (-INT_MAX)
  160. #endif
  161. #ifndef FP_ILOGBNAN
  162. # define FP_ILOGBNAN INT_MAX
  163. #endif
  164.  
  165. #ifndef MATH_ERRNO
  166. # define MATH_ERRNO 1
  167. #endif
  168. #ifndef MATH_ERREXCEPT
  169. # define MATH_ERREXCEPT 2
  170. #endif
  171. #ifndef math_errhandling
  172. # define math_errhandling MATH_ERRNO
  173. #endif
  174.  
  175. extern int __isinff (float x);
  176. extern int __isinfd (double x);
  177. extern int __isnanf (float x);
  178. extern int __isnand (double x);
  179. extern int __fpclassifyf (float x);
  180. extern int __fpclassifyd (double x);
  181. extern int __signbitf (float x);
  182. extern int __signbitd (double x);
  183.  
  184. #define fpclassify(__x) \
  185.         ((sizeof(__x) == sizeof(float))  ? __fpclassifyf(__x) : \
  186.         __fpclassifyd(__x))
  187.  
  188. #ifndef isfinite
  189.   #define isfinite(__y) \
  190.           (__extension__ ({int __cy = fpclassify(__y); \
  191.                            __cy != FP_INFINITE && __cy != FP_NAN;}))
  192. #endif
  193.  
  194. /* Note: isinf and isnan were once functions in newlib that took double
  195.  *       arguments.  C99 specifies that these names are reserved for macros
  196.  *       supporting multiple floating point types.  Thus, they are
  197.  *       now defined as macros.  Implementations of the old functions
  198.  *       taking double arguments still exist for compatibility purposes
  199.  *       (prototypes for them are in <ieeefp.h>).  */
  200. #ifndef isinf
  201.   #define isinf(y) (fpclassify(y) == FP_INFINITE)
  202. #endif
  203.  
  204. #ifndef isnan
  205.   #define isnan(y) (fpclassify(y) == FP_NAN)
  206. #endif
  207.  
  208. #define isnormal(y) (fpclassify(y) == FP_NORMAL)
  209. #define signbit(__x) \
  210.         ((sizeof(__x) == sizeof(float))  ?  __signbitf(__x) : \
  211.                 __signbitd(__x))
  212.  
  213. #define isgreater(x,y) \
  214.           (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
  215.                            !isunordered(__x,__y) && (__x > __y);}))
  216. #define isgreaterequal(x,y) \
  217.           (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
  218.                            !isunordered(__x,__y) && (__x >= __y);}))
  219. #define isless(x,y) \
  220.           (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
  221.                            !isunordered(__x,__y) && (__x < __y);}))
  222. #define islessequal(x,y) \
  223.           (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
  224.                            !isunordered(__x,__y) && (__x <= __y);}))
  225. #define islessgreater(x,y) \
  226.           (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
  227.                            !isunordered(__x,__y) && (__x < __y || __x > __y);}))
  228.  
  229. #define isunordered(a,b) \
  230.           (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \
  231.                            fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;}))
  232.  
  233. /* Non ANSI double precision functions.  */
  234.  
  235. extern double infinity _PARAMS((void));
  236. extern double nan _PARAMS((const char *));
  237. extern int finite _PARAMS((double));
  238. extern double copysign _PARAMS((double, double));
  239. extern double logb _PARAMS((double));
  240. extern int ilogb _PARAMS((double));
  241.  
  242. extern double asinh _PARAMS((double));
  243. extern double cbrt _PARAMS((double));
  244. extern double nextafter _PARAMS((double, double));
  245. extern double rint _PARAMS((double));
  246. extern double scalbn _PARAMS((double, int));
  247.  
  248. extern double exp2 _PARAMS((double));
  249. extern double scalbln _PARAMS((double, long int));
  250. extern double tgamma _PARAMS((double));
  251. extern double nearbyint _PARAMS((double));
  252. extern long int lrint _PARAMS((double));
  253. extern _LONG_LONG_TYPE int llrint _PARAMS((double));
  254. extern double round _PARAMS((double));
  255. extern long int lround _PARAMS((double));
  256. extern long long int llround _PARAMS((double));
  257. extern double trunc _PARAMS((double));
  258. extern double remquo _PARAMS((double, double, int *));
  259. extern double fdim _PARAMS((double, double));
  260. extern double fmax _PARAMS((double, double));
  261. extern double fmin _PARAMS((double, double));
  262. extern double fma _PARAMS((double, double, double));
  263.  
  264. #ifndef __math_68881
  265. extern double log1p _PARAMS((double));
  266. extern double expm1 _PARAMS((double));
  267. #endif /* ! defined (__math_68881) */
  268.  
  269. #ifndef _REENT_ONLY
  270. extern double acosh _PARAMS((double));
  271. extern double atanh _PARAMS((double));
  272. extern double remainder _PARAMS((double, double));
  273. extern double gamma _PARAMS((double));
  274. extern double lgamma _PARAMS((double));
  275. extern double erf _PARAMS((double));
  276. extern double erfc _PARAMS((double));
  277. extern double log2 _PARAMS((double));
  278. #if !defined(__cplusplus)
  279. #define log2(x) (log (x) / _M_LN2)
  280. #endif
  281.  
  282. #ifndef __math_68881
  283. extern double hypot _PARAMS((double, double));
  284. #endif
  285.  
  286. #endif /* ! defined (_REENT_ONLY) */
  287.  
  288. /* Single precision versions of ANSI functions.  */
  289.  
  290. extern float atanf _PARAMS((float));
  291. extern float cosf _PARAMS((float));
  292. extern float sinf _PARAMS((float));
  293. extern float tanf _PARAMS((float));
  294. extern float tanhf _PARAMS((float));
  295. extern float frexpf _PARAMS((float, int *));
  296. extern float modff _PARAMS((float, float *));
  297. extern float ceilf _PARAMS((float));
  298. extern float fabsf _PARAMS((float));
  299. extern float floorf _PARAMS((float));
  300.  
  301. #ifndef _REENT_ONLY
  302. extern float acosf _PARAMS((float));
  303. extern float asinf _PARAMS((float));
  304. extern float atan2f _PARAMS((float, float));
  305. extern float coshf _PARAMS((float));
  306. extern float sinhf _PARAMS((float));
  307. extern float expf _PARAMS((float));
  308. extern float ldexpf _PARAMS((float, int));
  309. extern float logf _PARAMS((float));
  310. extern float log10f _PARAMS((float));
  311. extern float powf _PARAMS((float, float));
  312. extern float sqrtf _PARAMS((float));
  313. extern float fmodf _PARAMS((float, float));
  314. #endif /* ! defined (_REENT_ONLY) */
  315.  
  316. /* Other single precision functions.  */
  317.  
  318. extern float exp2f _PARAMS((float));
  319. extern float scalblnf _PARAMS((float, long int));
  320. extern float tgammaf _PARAMS((float));
  321. extern float nearbyintf _PARAMS((float));
  322. extern long int lrintf _PARAMS((float));
  323. extern _LONG_LONG_TYPE llrintf _PARAMS((float));
  324. extern float roundf _PARAMS((float));
  325. extern long int lroundf _PARAMS((float));
  326. extern long long int llroundf _PARAMS((float));
  327. extern float truncf _PARAMS((float));
  328. extern float remquof _PARAMS((float, float, int *));
  329. extern float fdimf _PARAMS((float, float));
  330. extern float fmaxf _PARAMS((float, float));
  331. extern float fminf _PARAMS((float, float));
  332. extern float fmaf _PARAMS((float, float, float));
  333.  
  334. extern float infinityf _PARAMS((void));
  335. extern float nanf _PARAMS((const char *));
  336. extern int finitef _PARAMS((float));
  337. extern float copysignf _PARAMS((float, float));
  338. extern float logbf _PARAMS((float));
  339. extern int ilogbf _PARAMS((float));
  340.  
  341. extern float asinhf _PARAMS((float));
  342. extern float cbrtf _PARAMS((float));
  343. extern float nextafterf _PARAMS((float, float));
  344. extern float rintf _PARAMS((float));
  345. extern float scalbnf _PARAMS((float, int));
  346. extern float log1pf _PARAMS((float));
  347. extern float expm1f _PARAMS((float));
  348.  
  349. #ifndef _REENT_ONLY
  350. extern float acoshf _PARAMS((float));
  351. extern float atanhf _PARAMS((float));
  352. extern float remainderf _PARAMS((float, float));
  353. extern float gammaf _PARAMS((float));
  354. extern float lgammaf _PARAMS((float));
  355. extern float erff _PARAMS((float));
  356. extern float erfcf _PARAMS((float));
  357. extern float log2f _PARAMS((float));
  358. #if !defined(__cplusplus)
  359. #define log2f(x) (logf (x) / (float_t) _M_LN2)
  360. #endif
  361. extern float hypotf _PARAMS((float, float));
  362. #endif /* ! defined (_REENT_ONLY) */
  363.  
  364. /* On platforms where long double equals double.  */
  365. #ifdef _LDBL_EQ_DBL
  366. /* Reentrant ANSI C functions.  */
  367. #ifndef __math_68881
  368. extern long double atanl _PARAMS((long double));
  369. extern long double cosl _PARAMS((long double));
  370. extern long double sinl _PARAMS((long double));
  371. extern long double tanl _PARAMS((long double));
  372. extern long double tanhl _PARAMS((long double));
  373. extern long double frexpl _PARAMS((long double value, int *));
  374. extern long double modfl _PARAMS((long double, long double *));
  375. extern long double ceill _PARAMS((long double));
  376. extern long double fabsl _PARAMS((long double));
  377. extern long double floorl _PARAMS((long double));
  378. extern long double log1pl _PARAMS((long double));
  379. extern long double expm1l _PARAMS((long double));
  380. #endif /* ! defined (__math_68881) */
  381. /* Non reentrant ANSI C functions.  */
  382. #ifndef _REENT_ONLY
  383. #ifndef __math_68881
  384. extern long double acosl _PARAMS((long double));
  385. extern long double asinl _PARAMS((long double));
  386. extern long double atan2l _PARAMS((long double, long double));
  387. extern long double coshl _PARAMS((long double));
  388. extern long double sinhl _PARAMS((long double));
  389. extern long double expl _PARAMS((long double));
  390. extern long double ldexpl _PARAMS((long double, int));
  391. extern long double logl _PARAMS((long double));
  392. extern long double log10l _PARAMS((long double));
  393. extern long double powl _PARAMS((long double, long double));
  394. extern long double sqrtl _PARAMS((long double));
  395. extern long double fmodl _PARAMS((long double, long double));
  396. extern long double hypotl _PARAMS((long double, long double));
  397. #endif /* ! defined (__math_68881) */
  398. #endif /* ! defined (_REENT_ONLY) */
  399. extern long double copysignl _PARAMS((long double, long double));
  400. extern long double nanl _PARAMS((const char *));
  401. extern int ilogbl _PARAMS((long double));
  402. extern long double asinhl _PARAMS((long double));
  403. extern long double cbrtl _PARAMS((long double));
  404. extern long double nextafterl _PARAMS((long double, long double));
  405. extern long double rintl _PARAMS((long double));
  406. extern long double scalbnl _PARAMS((long double, int));
  407. extern long double exp2l _PARAMS((long double));
  408. extern long double scalblnl _PARAMS((long double, long));
  409. extern long double tgammal _PARAMS((long double));
  410. extern long double nearbyintl _PARAMS((long double));
  411. extern long int lrintl _PARAMS((long double));
  412. extern long long int llrintl _PARAMS((long double));
  413. extern long double roundl _PARAMS((long double));
  414. extern long lroundl _PARAMS((long double));
  415. extern _LONG_LONG_TYPE int llroundl _PARAMS((long double));
  416. extern long double truncl _PARAMS((long double));
  417. extern long double remquol _PARAMS((long double, long double, int *));
  418. extern long double fdiml _PARAMS((long double, long double));
  419. extern long double fmaxl _PARAMS((long double, long double));
  420. extern long double fminl _PARAMS((long double, long double));
  421. extern long double fmal _PARAMS((long double, long double, long double));
  422. #ifndef _REENT_ONLY
  423. extern long double acoshl _PARAMS((long double));
  424. extern long double atanhl _PARAMS((long double));
  425. extern long double remainderl _PARAMS((long double, long double));
  426. extern long double lgammal _PARAMS((long double));
  427. extern long double erfl _PARAMS((long double));
  428. extern long double erfcl _PARAMS((long double));
  429. #endif /* ! defined (_REENT_ONLY) */
  430. #else /* !_LDBL_EQ_DBL */
  431. #ifdef __i386__
  432. /* Other long double precision functions.  */
  433. extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE));
  434. extern long int lrintl _PARAMS((_LONG_DOUBLE));
  435. extern _LONG_LONG_TYPE llrintl _PARAMS((_LONG_DOUBLE));
  436. #endif /* __i386__ */
  437. #endif /* !_LDBL_EQ_DBL */
  438.  
  439. #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */
  440.  
  441. #if !defined (__STRICT_ANSI__) || defined(__cplusplus)
  442.  
  443. extern double drem _PARAMS((double, double));
  444. extern void sincos _PARAMS((double, double *, double *));
  445. extern double gamma_r _PARAMS((double, int *));
  446. extern double lgamma_r _PARAMS((double, int *));
  447.  
  448. extern double y0 _PARAMS((double));
  449. extern double y1 _PARAMS((double));
  450. extern double yn _PARAMS((int, double));
  451. extern double j0 _PARAMS((double));
  452. extern double j1 _PARAMS((double));
  453. extern double jn _PARAMS((int, double));
  454.  
  455. extern float dremf _PARAMS((float, float));
  456. extern void sincosf _PARAMS((float, float *, float *));
  457. extern float gammaf_r _PARAMS((float, int *));
  458. extern float lgammaf_r _PARAMS((float, int *));
  459.  
  460. extern float y0f _PARAMS((float));
  461. extern float y1f _PARAMS((float));
  462. extern float ynf _PARAMS((int, float));
  463. extern float j0f _PARAMS((float));
  464. extern float j1f _PARAMS((float));
  465. extern float jnf _PARAMS((int, float));
  466.  
  467. /* GNU extensions */
  468. # ifndef exp10
  469. extern double exp10 _PARAMS((double));
  470. # endif
  471. # ifndef pow10
  472. extern double pow10 _PARAMS((double));
  473. # endif
  474. # ifndef exp10f
  475. extern float exp10f _PARAMS((float));
  476. # endif
  477. # ifndef pow10f
  478. extern float pow10f _PARAMS((float));
  479. # endif
  480.  
  481. #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) */
  482.  
  483. #ifndef __STRICT_ANSI__
  484.  
  485. /* The gamma functions use a global variable, signgam.  */
  486. #ifndef _REENT_ONLY
  487. #define signgam (*__signgam())
  488. extern int *__signgam _PARAMS((void));
  489. #endif /* ! defined (_REENT_ONLY) */
  490.  
  491. #define __signgam_r(ptr) _REENT_SIGNGAM(ptr)
  492.  
  493. /* The exception structure passed to the matherr routine.  */
  494. /* We have a problem when using C++ since `exception' is a reserved
  495.    name in C++.  */
  496. #ifdef __cplusplus
  497. struct __exception
  498. #else
  499. struct exception
  500. #endif
  501. {
  502.   int type;
  503.   char *name;
  504.   double arg1;
  505.   double arg2;
  506.   double retval;
  507.   int err;
  508. };
  509.  
  510. #ifdef __cplusplus
  511. extern int matherr _PARAMS((struct __exception *e));
  512. #else
  513. extern int matherr _PARAMS((struct exception *e));
  514. #endif
  515.  
  516. /* Values for the type field of struct exception.  */
  517.  
  518. #define DOMAIN 1
  519. #define SING 2
  520. #define OVERFLOW 3
  521. #define UNDERFLOW 4
  522. #define TLOSS 5
  523. #define PLOSS 6
  524.  
  525. /* Useful constants.  */
  526.  
  527. #define MAXFLOAT        3.40282347e+38F
  528.  
  529. #define M_E             2.7182818284590452354
  530. #define M_LOG2E         1.4426950408889634074
  531. #define M_LOG10E        0.43429448190325182765
  532. #define M_LN2           _M_LN2
  533. #define M_LN10          2.30258509299404568402
  534. #define M_PI            3.14159265358979323846
  535. #define M_TWOPI         (M_PI * 2.0)
  536. #define M_PI_2          1.57079632679489661923
  537. #define M_PI_4          0.78539816339744830962
  538. #define M_3PI_4         2.3561944901923448370E0
  539. #define M_SQRTPI        1.77245385090551602792981
  540. #define M_1_PI          0.31830988618379067154
  541. #define M_2_PI          0.63661977236758134308
  542. #define M_2_SQRTPI      1.12837916709551257390
  543. #define M_SQRT2         1.41421356237309504880
  544. #define M_SQRT1_2       0.70710678118654752440
  545. #define M_LN2LO         1.9082149292705877000E-10
  546. #define M_LN2HI         6.9314718036912381649E-1
  547. #define M_SQRT3 1.73205080756887719000
  548. #define M_IVLN10        0.43429448190325182765 /* 1 / log(10) */
  549. #define M_LOG2_E        _M_LN2
  550. #define M_INVLN2        1.4426950408889633870E0  /* 1 / log(2) */
  551.  
  552. /* Global control over fdlibm error handling.  */
  553.  
  554. enum __fdlibm_version
  555. {
  556.   __fdlibm_ieee = -1,
  557.   __fdlibm_svid,
  558.   __fdlibm_xopen,
  559.   __fdlibm_posix
  560. };
  561.  
  562. #define _LIB_VERSION_TYPE enum __fdlibm_version
  563. #define _LIB_VERSION __fdlib_version
  564.  
  565. extern __IMPORT _LIB_VERSION_TYPE _LIB_VERSION;
  566.  
  567. #define _IEEE_  __fdlibm_ieee
  568. #define _SVID_  __fdlibm_svid
  569. #define _XOPEN_ __fdlibm_xopen
  570. #define _POSIX_ __fdlibm_posix
  571.  
  572. #endif /* ! defined (__STRICT_ANSI__) */
  573.  
  574. _END_STD_C
  575.  
  576. #ifdef __FAST_MATH__
  577. #include <machine/fastmath.h>
  578. #endif
  579.  
  580. #endif /* _MATH_H_ */
  581.