math.h revision 95fa061678400315ee757758bf5f9146176d47a0
1/* 2 * ==================================================== 3 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 4 * 5 * Developed at SunPro, a Sun Microsystems, Inc. business. 6 * Permission to use, copy, modify, and distribute this 7 * software is freely granted, provided that this notice 8 * is preserved. 9 * ==================================================== 10 */ 11 12/* 13 * from: @(#)fdlibm.h 5.1 93/09/24 14 * $FreeBSD$ 15 */ 16 17#ifndef _MATH_H_ 18#define _MATH_H_ 19 20#include <sys/cdefs.h> 21#include <limits.h> 22 23__BEGIN_DECLS 24 25#define HUGE_VAL __builtin_huge_val() 26 27#define FP_ILOGB0 (-INT_MAX) 28#define FP_ILOGBNAN INT_MAX 29 30#define HUGE_VALF __builtin_huge_valf() 31#define HUGE_VALL __builtin_huge_vall() 32#define INFINITY __builtin_inff() 33#define NAN __builtin_nanf("") 34 35#define MATH_ERRNO 1 36#define MATH_ERREXCEPT 2 37#define math_errhandling MATH_ERREXCEPT 38 39#if defined(__FP_FAST_FMA) 40#define FP_FAST_FMA 1 41#endif 42#if defined(__FP_FAST_FMAF) 43#define FP_FAST_FMAF 1 44#endif 45#if defined(__FP_FAST_FMAL) 46#define FP_FAST_FMAL 1 47#endif 48 49/* Symbolic constants to classify floating point numbers. */ 50#define FP_INFINITE 0x01 51#define FP_NAN 0x02 52#define FP_NORMAL 0x04 53#define FP_SUBNORMAL 0x08 54#define FP_ZERO 0x10 55#define fpclassify(x) \ 56 __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x) 57 58#define isfinite(x) __builtin_isfinite(x) 59#define isinf(x) __builtin_isinf(x) 60#define isnan(x) __builtin_isnan(x) 61#define isnormal(x) __builtin_isnormal(x) 62 63#define isgreater(x, y) __builtin_isgreater((x), (y)) 64#define isgreaterequal(x, y) __builtin_isgreaterequal((x), (y)) 65#define isless(x, y) __builtin_isless((x), (y)) 66#define islessequal(x, y) __builtin_islessequal((x), (y)) 67#define islessgreater(x, y) __builtin_islessgreater((x), (y)) 68#define isunordered(x, y) __builtin_isunordered((x), (y)) 69 70#define signbit(x) \ 71 ((sizeof(x) == sizeof(float)) ? __builtin_signbitf(x) \ 72 : (sizeof(x) == sizeof(double)) ? __builtin_signbit(x) \ 73 : __builtin_signbitl(x)) 74 75typedef double __double_t; 76typedef __double_t double_t; 77typedef float __float_t; 78typedef __float_t float_t; 79 80#if defined(__USE_BSD) 81#define HUGE MAXFLOAT 82#endif 83 84extern int signgam; 85 86/* 87 * Most of these functions depend on the rounding mode and have the side 88 * effect of raising floating-point exceptions, so they are not declared 89 * as __attribute_const__. In C99, FENV_ACCESS affects the purity of these functions. 90 */ 91 92int __fpclassifyd(double) __attribute_const__; 93int __fpclassifyf(float) __attribute_const__; 94int __fpclassifyl(long double) __attribute_const__; 95int __isfinitef(float) __attribute_const__; 96int __isfinite(double) __attribute_const__; 97int __isfinitel(long double) __attribute_const__; 98int __isinff(float) __attribute_const__; 99int __isinfl(long double) __attribute_const__; 100int __isnanf(float) __attribute_const__ __INTRODUCED_IN(21); 101int __isnanl(long double) __attribute_const__; 102int __isnormalf(float) __attribute_const__; 103int __isnormal(double) __attribute_const__; 104int __isnormall(long double) __attribute_const__; 105int __signbit(double) __attribute_const__; 106int __signbitf(float) __attribute_const__; 107int __signbitl(long double) __attribute_const__; 108 109double acos(double); 110double asin(double); 111double atan(double); 112double atan2(double, double); 113double cos(double); 114double sin(double); 115double tan(double); 116 117double cosh(double); 118double sinh(double); 119double tanh(double); 120 121double exp(double); 122double frexp(double, int *); /* fundamentally !__attribute_const__ */ 123double ldexp(double, int); 124double log(double); 125double log10(double); 126double modf(double, double *); /* fundamentally !__attribute_const__ */ 127 128double pow(double, double); 129double sqrt(double); 130 131double ceil(double); 132double fabs(double) __attribute_const__; 133double floor(double); 134double fmod(double, double); 135 136double acosh(double); 137double asinh(double); 138double atanh(double); 139double cbrt(double); 140double erf(double); 141double erfc(double); 142double exp2(double); 143double expm1(double); 144double fma(double, double, double); 145double hypot(double, double); 146int ilogb(double) __attribute_const__; 147int(isinf)(double) __attribute_const__ __INTRODUCED_IN(21); 148int (isnan)(double) __attribute_const__; 149double lgamma(double); 150long long llrint(double); 151long long llround(double); 152double log1p(double); 153double log2(double) __INTRODUCED_IN(18); 154double logb(double); 155long lrint(double); 156long lround(double); 157 158double nan(const char*) __attribute_const__ __INTRODUCED_IN_ARM(13) __INTRODUCED_IN_MIPS(13) 159 __INTRODUCED_IN_X86(9); 160 161double nextafter(double, double); 162double remainder(double, double); 163double remquo(double, double, int*); 164double rint(double); 165 166double copysign(double, double) __attribute_const__; 167double fdim(double, double); 168double fmax(double, double) __attribute_const__; 169double fmin(double, double) __attribute_const__; 170double nearbyint(double); 171double round(double); 172double scalbln(double, long) __INTRODUCED_IN_X86(18) __VERSIONER_NO_GUARD; 173double scalbn(double, int); 174double tgamma(double); 175double trunc(double); 176 177float acosf(float); 178float asinf(float); 179float atanf(float); 180float atan2f(float, float); 181float cosf(float); 182float sinf(float); 183float tanf(float); 184 185float coshf(float); 186float sinhf(float); 187float tanhf(float); 188 189float exp2f(float); 190float expf(float); 191float expm1f(float); 192float frexpf(float, int *); /* fundamentally !__attribute_const__ */ 193int ilogbf(float) __attribute_const__; 194float ldexpf(float, int); 195float log10f(float); 196float log1pf(float); 197float log2f(float) __INTRODUCED_IN(18); 198float logf(float); 199float modff(float, float *); /* fundamentally !__attribute_const__ */ 200 201float powf(float, float); 202float sqrtf(float); 203 204float ceilf(float); 205float fabsf(float) __attribute_const__; 206float floorf(float); 207float fmodf(float, float); 208float roundf(float); 209 210float erff(float); 211float erfcf(float); 212float hypotf(float, float); 213float lgammaf(float); 214float tgammaf(float) __INTRODUCED_IN_ARM(13) __INTRODUCED_IN_MIPS(13) __INTRODUCED_IN_X86(9); 215 216float acoshf(float); 217float asinhf(float); 218float atanhf(float); 219float cbrtf(float); 220float logbf(float); 221float copysignf(float, float) __attribute_const__; 222long long llrintf(float); 223long long llroundf(float); 224long lrintf(float); 225long lroundf(float); 226float nanf(const char*) __attribute_const__ __INTRODUCED_IN_ARM(13) __INTRODUCED_IN_MIPS(13) 227 __INTRODUCED_IN_X86(9); 228float nearbyintf(float); 229float nextafterf(float, float); 230float remainderf(float, float); 231float remquof(float, float, int *); 232float rintf(float); 233float scalblnf(float, long) __INTRODUCED_IN_X86(18) __VERSIONER_NO_GUARD; 234float scalbnf(float, int); 235float truncf(float); 236 237float fdimf(float, float); 238float fmaf(float, float, float); 239float fmaxf(float, float) __attribute_const__; 240float fminf(float, float) __attribute_const__; 241 242long double acoshl(long double) __INTRODUCED_IN(21); 243long double acosl(long double) __INTRODUCED_IN(21); 244long double asinhl(long double) __INTRODUCED_IN(21); 245long double asinl(long double) __INTRODUCED_IN(21); 246long double atan2l(long double, long double) __INTRODUCED_IN(21); 247long double atanhl(long double) __INTRODUCED_IN(21); 248long double atanl(long double) __INTRODUCED_IN(21); 249long double cbrtl(long double) __INTRODUCED_IN(21); 250long double ceill(long double); 251long double copysignl(long double, long double) __attribute_const__; 252long double coshl(long double) __INTRODUCED_IN(21); 253long double cosl(long double) __INTRODUCED_IN(21); 254long double erfcl(long double) __INTRODUCED_IN(21); 255long double erfl(long double) __INTRODUCED_IN(21); 256long double exp2l(long double) __INTRODUCED_IN(21); 257long double expl(long double) __INTRODUCED_IN(21); 258long double expm1l(long double) __INTRODUCED_IN(21); 259long double fabsl(long double) __attribute_const__; 260long double fdiml(long double, long double); 261long double floorl(long double); 262long double fmal(long double, long double, long double) __INTRODUCED_IN(21) __VERSIONER_NO_GUARD; 263long double fmaxl(long double, long double) __attribute_const__; 264long double fminl(long double, long double) __attribute_const__; 265long double fmodl(long double, long double) __INTRODUCED_IN(21); 266long double frexpl(long double value, int*) 267 __INTRODUCED_IN(21) __VERSIONER_NO_GUARD; /* fundamentally !__attribute_const__ */ 268long double hypotl(long double, long double) __INTRODUCED_IN(21); 269int ilogbl(long double) __attribute_const__; 270long double ldexpl(long double, int); 271long double lgammal(long double) __INTRODUCED_IN(21); 272long long llrintl(long double) __INTRODUCED_IN(21); 273long long llroundl(long double); 274long double log10l(long double) __INTRODUCED_IN(21); 275long double log1pl(long double) __INTRODUCED_IN(21); 276long double log2l(long double) __INTRODUCED_IN(18); 277long double logbl(long double) __INTRODUCED_IN(18); 278long double logl(long double) __INTRODUCED_IN(21); 279long lrintl(long double) __INTRODUCED_IN(21); 280long lroundl(long double); 281long double modfl(long double, long double*) __INTRODUCED_IN(21); /* fundamentally !__attribute_const__ */ 282long double nanl(const char*) __attribute_const__ __INTRODUCED_IN(13); 283long double nearbyintl(long double) __INTRODUCED_IN(21); 284long double nextafterl(long double, long double) __INTRODUCED_IN(21) __VERSIONER_NO_GUARD; 285double nexttoward(double, long double) __INTRODUCED_IN(18) __VERSIONER_NO_GUARD; 286float nexttowardf(float, long double); 287long double nexttowardl(long double, long double) __INTRODUCED_IN(18) __VERSIONER_NO_GUARD; 288long double powl(long double, long double) __INTRODUCED_IN(21); 289long double remainderl(long double, long double) __INTRODUCED_IN(21); 290long double remquol(long double, long double, int*) __INTRODUCED_IN(21); 291long double rintl(long double) __INTRODUCED_IN(21); 292long double roundl(long double); 293long double scalblnl(long double, long) __INTRODUCED_IN_X86(18) __VERSIONER_NO_GUARD; 294long double scalbnl(long double, int); 295long double sinhl(long double) __INTRODUCED_IN(21); 296long double sinl(long double) __INTRODUCED_IN(21); 297long double sqrtl(long double) __INTRODUCED_IN(21); 298long double tanhl(long double) __INTRODUCED_IN(21); 299long double tanl(long double) __INTRODUCED_IN(21); 300long double tgammal(long double) __INTRODUCED_IN(21); 301long double truncl(long double); 302 303double j0(double); 304double j1(double); 305double jn(int, double); 306double y0(double); 307double y1(double); 308double yn(int, double); 309 310#define M_E 2.7182818284590452354 /* e */ 311#define M_LOG2E 1.4426950408889634074 /* log 2e */ 312#define M_LOG10E 0.43429448190325182765 /* log 10e */ 313#define M_LN2 0.69314718055994530942 /* log e2 */ 314#define M_LN10 2.30258509299404568402 /* log e10 */ 315#define M_PI 3.14159265358979323846 /* pi */ 316#define M_PI_2 1.57079632679489661923 /* pi/2 */ 317#define M_PI_4 0.78539816339744830962 /* pi/4 */ 318#define M_1_PI 0.31830988618379067154 /* 1/pi */ 319#define M_2_PI 0.63661977236758134308 /* 2/pi */ 320#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ 321#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ 322#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ 323 324#define MAXFLOAT ((float)3.40282346638528860e+38) 325 326#if defined(__USE_BSD) || defined(__USE_GNU) 327double gamma(double); 328double scalb(double, double); 329double drem(double, double); 330int finite(double) __attribute_const__; 331int isnanf(float) __attribute_const__; 332double gamma_r(double, int*); 333double lgamma_r(double, int*); 334double significand(double); 335long double lgammal_r(long double, int*) __INTRODUCED_IN(23); 336long double significandl(long double) __INTRODUCED_IN(21); 337float dremf(float, float); 338int finitef(float) __attribute_const__; 339float gammaf(float); 340float j0f(float); 341float j1f(float); 342float jnf(int, float); 343float scalbf(float, float); 344float y0f(float); 345float y1f(float); 346float ynf(int, float); 347float gammaf_r(float, int *); 348float lgammaf_r(float, int *); 349float significandf(float); 350#endif 351 352#if defined(__USE_GNU) 353#define M_El 2.718281828459045235360287471352662498L /* e */ 354#define M_LOG2El 1.442695040888963407359924681001892137L /* log 2e */ 355#define M_LOG10El 0.434294481903251827651128918916605082L /* log 10e */ 356#define M_LN2l 0.693147180559945309417232121458176568L /* log e2 */ 357#define M_LN10l 2.302585092994045684017991454684364208L /* log e10 */ 358#define M_PIl 3.141592653589793238462643383279502884L /* pi */ 359#define M_PI_2l 1.570796326794896619231321691639751442L /* pi/2 */ 360#define M_PI_4l 0.785398163397448309615660845819875721L /* pi/4 */ 361#define M_1_PIl 0.318309886183790671537767526745028724L /* 1/pi */ 362#define M_2_PIl 0.636619772367581343075535053490057448L /* 2/pi */ 363#define M_2_SQRTPIl 1.128379167095512573896158903121545172L /* 2/sqrt(pi) */ 364#define M_SQRT2l 1.414213562373095048801688724209698079L /* sqrt(2) */ 365#define M_SQRT1_2l 0.707106781186547524400844362104849039L /* 1/sqrt(2) */ 366void sincos(double, double*, double*); 367void sincosf(float, float*, float*); 368void sincosl(long double, long double*, long double*); 369#endif 370 371__END_DECLS 372 373#endif /* !_MATH_H_ */ 374