math.h 19 KB

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