125c28e83SPiotr Jasiukajtis /* 225c28e83SPiotr Jasiukajtis * CDDL HEADER START 325c28e83SPiotr Jasiukajtis * 425c28e83SPiotr Jasiukajtis * The contents of this file are subject to the terms of the 525c28e83SPiotr Jasiukajtis * Common Development and Distribution License (the "License"). 625c28e83SPiotr Jasiukajtis * You may not use this file except in compliance with the License. 725c28e83SPiotr Jasiukajtis * 825c28e83SPiotr Jasiukajtis * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 925c28e83SPiotr Jasiukajtis * or http://www.opensolaris.org/os/licensing. 1025c28e83SPiotr Jasiukajtis * See the License for the specific language governing permissions 1125c28e83SPiotr Jasiukajtis * and limitations under the License. 1225c28e83SPiotr Jasiukajtis * 1325c28e83SPiotr Jasiukajtis * When distributing Covered Code, include this CDDL HEADER in each 1425c28e83SPiotr Jasiukajtis * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1525c28e83SPiotr Jasiukajtis * If applicable, add the following below this CDDL HEADER, with the 1625c28e83SPiotr Jasiukajtis * fields enclosed by brackets "[]" replaced with your own identifying 1725c28e83SPiotr Jasiukajtis * information: Portions Copyright [yyyy] [name of copyright owner] 1825c28e83SPiotr Jasiukajtis * 1925c28e83SPiotr Jasiukajtis * CDDL HEADER END 2025c28e83SPiotr Jasiukajtis */ 2125c28e83SPiotr Jasiukajtis /* 2225c28e83SPiotr Jasiukajtis * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 2325c28e83SPiotr Jasiukajtis */ 2425c28e83SPiotr Jasiukajtis /* 2525c28e83SPiotr Jasiukajtis * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 2625c28e83SPiotr Jasiukajtis * Use is subject to license terms. 2725c28e83SPiotr Jasiukajtis */ 28*24f90e6dSGarrett D'Amore /* 29*24f90e6dSGarrett D'Amore * Copyright 2014 Garrett D'Amore <garrett@damore.org> 30*24f90e6dSGarrett D'Amore */ 3125c28e83SPiotr Jasiukajtis 3225c28e83SPiotr Jasiukajtis #ifndef _MATH_H 3325c28e83SPiotr Jasiukajtis #define _MATH_H 3425c28e83SPiotr Jasiukajtis 3525c28e83SPiotr Jasiukajtis #include <iso/math_iso.h> 3625c28e83SPiotr Jasiukajtis #include <iso/math_c99.h> 3725c28e83SPiotr Jasiukajtis 3825c28e83SPiotr Jasiukajtis #if __cplusplus >= 199711L 3925c28e83SPiotr Jasiukajtis using std::abs; 4025c28e83SPiotr Jasiukajtis using std::acos; 4125c28e83SPiotr Jasiukajtis using std::asin; 4225c28e83SPiotr Jasiukajtis using std::atan2; 4325c28e83SPiotr Jasiukajtis using std::atan; 4425c28e83SPiotr Jasiukajtis using std::ceil; 4525c28e83SPiotr Jasiukajtis using std::cos; 4625c28e83SPiotr Jasiukajtis using std::cosh; 4725c28e83SPiotr Jasiukajtis using std::exp; 4825c28e83SPiotr Jasiukajtis using std::fabs; 4925c28e83SPiotr Jasiukajtis using std::floor; 5025c28e83SPiotr Jasiukajtis using std::fmod; 5125c28e83SPiotr Jasiukajtis using std::frexp; 5225c28e83SPiotr Jasiukajtis using std::ldexp; 5325c28e83SPiotr Jasiukajtis using std::log10; 5425c28e83SPiotr Jasiukajtis using std::log; 5525c28e83SPiotr Jasiukajtis using std::modf; 5625c28e83SPiotr Jasiukajtis using std::pow; 5725c28e83SPiotr Jasiukajtis using std::sin; 5825c28e83SPiotr Jasiukajtis using std::sinh; 5925c28e83SPiotr Jasiukajtis using std::sqrt; 6025c28e83SPiotr Jasiukajtis using std::tan; 6125c28e83SPiotr Jasiukajtis using std::tanh; 6225c28e83SPiotr Jasiukajtis #endif 6325c28e83SPiotr Jasiukajtis 6425c28e83SPiotr Jasiukajtis #ifdef __cplusplus 6525c28e83SPiotr Jasiukajtis extern "C" { 6625c28e83SPiotr Jasiukajtis #endif 6725c28e83SPiotr Jasiukajtis 6825c28e83SPiotr Jasiukajtis #if defined(__cplusplus) 6925c28e83SPiotr Jasiukajtis #define exception __math_exception 7025c28e83SPiotr Jasiukajtis #endif 7125c28e83SPiotr Jasiukajtis 7225c28e83SPiotr Jasiukajtis #if defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) || \ 7325c28e83SPiotr Jasiukajtis !defined(_STRICT_STDC) && !defined(_POSIX_C_SOURCE) 7425c28e83SPiotr Jasiukajtis /* 7525c28e83SPiotr Jasiukajtis * SVID & X/Open 7625c28e83SPiotr Jasiukajtis */ 7725c28e83SPiotr Jasiukajtis #define M_E 2.7182818284590452354 7825c28e83SPiotr Jasiukajtis #define M_LOG2E 1.4426950408889634074 7925c28e83SPiotr Jasiukajtis #define M_LOG10E 0.43429448190325182765 8025c28e83SPiotr Jasiukajtis #define M_LN2 0.69314718055994530942 8125c28e83SPiotr Jasiukajtis #define M_LN10 2.30258509299404568402 8225c28e83SPiotr Jasiukajtis #define M_PI 3.14159265358979323846 8325c28e83SPiotr Jasiukajtis #define M_PI_2 1.57079632679489661923 8425c28e83SPiotr Jasiukajtis #define M_PI_4 0.78539816339744830962 8525c28e83SPiotr Jasiukajtis #define M_1_PI 0.31830988618379067154 8625c28e83SPiotr Jasiukajtis #define M_2_PI 0.63661977236758134308 8725c28e83SPiotr Jasiukajtis #define M_2_SQRTPI 1.12837916709551257390 8825c28e83SPiotr Jasiukajtis #define M_SQRT2 1.41421356237309504880 8925c28e83SPiotr Jasiukajtis #define M_SQRT1_2 0.70710678118654752440 9025c28e83SPiotr Jasiukajtis 9125c28e83SPiotr Jasiukajtis extern int signgam; 9225c28e83SPiotr Jasiukajtis 9325c28e83SPiotr Jasiukajtis #define MAXFLOAT ((float)3.40282346638528860e+38) 9425c28e83SPiotr Jasiukajtis 9525c28e83SPiotr Jasiukajtis #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) 9625c28e83SPiotr Jasiukajtis /* 9725c28e83SPiotr Jasiukajtis * SVID 9825c28e83SPiotr Jasiukajtis */ 9925c28e83SPiotr Jasiukajtis enum version {libm_ieee = -1, c_issue_4, ansi_1, strict_ansi}; 10025c28e83SPiotr Jasiukajtis 10125c28e83SPiotr Jasiukajtis #ifdef __STDC__ 10225c28e83SPiotr Jasiukajtis extern const enum version _lib_version; 10325c28e83SPiotr Jasiukajtis #else 10425c28e83SPiotr Jasiukajtis extern enum version _lib_version; 10525c28e83SPiotr Jasiukajtis #endif 10625c28e83SPiotr Jasiukajtis 10725c28e83SPiotr Jasiukajtis struct exception { 10825c28e83SPiotr Jasiukajtis int type; 10925c28e83SPiotr Jasiukajtis char *name; 11025c28e83SPiotr Jasiukajtis double arg1; 11125c28e83SPiotr Jasiukajtis double arg2; 11225c28e83SPiotr Jasiukajtis double retval; 11325c28e83SPiotr Jasiukajtis }; 11425c28e83SPiotr Jasiukajtis 11525c28e83SPiotr Jasiukajtis #define HUGE MAXFLOAT 11625c28e83SPiotr Jasiukajtis 11725c28e83SPiotr Jasiukajtis #define _ABS(x) ((x) < 0 ? -(x) : (x)) 11825c28e83SPiotr Jasiukajtis 11925c28e83SPiotr Jasiukajtis #define _REDUCE(TYPE, X, XN, C1, C2) { \ 12025c28e83SPiotr Jasiukajtis double x1 = (double)(TYPE)X, x2 = X - x1; \ 12125c28e83SPiotr Jasiukajtis X = x1 - (XN) * (C1); X += x2; X -= (XN) * (C2); } 12225c28e83SPiotr Jasiukajtis 12325c28e83SPiotr Jasiukajtis #define DOMAIN 1 12425c28e83SPiotr Jasiukajtis #define SING 2 12525c28e83SPiotr Jasiukajtis #define OVERFLOW 3 12625c28e83SPiotr Jasiukajtis #define UNDERFLOW 4 12725c28e83SPiotr Jasiukajtis #define TLOSS 5 12825c28e83SPiotr Jasiukajtis #define PLOSS 6 12925c28e83SPiotr Jasiukajtis 13025c28e83SPiotr Jasiukajtis #define _POLY1(x, c) ((c)[0] * (x) + (c)[1]) 13125c28e83SPiotr Jasiukajtis #define _POLY2(x, c) (_POLY1((x), (c)) * (x) + (c)[2]) 13225c28e83SPiotr Jasiukajtis #define _POLY3(x, c) (_POLY2((x), (c)) * (x) + (c)[3]) 13325c28e83SPiotr Jasiukajtis #define _POLY4(x, c) (_POLY3((x), (c)) * (x) + (c)[4]) 13425c28e83SPiotr Jasiukajtis #define _POLY5(x, c) (_POLY4((x), (c)) * (x) + (c)[5]) 13525c28e83SPiotr Jasiukajtis #define _POLY6(x, c) (_POLY5((x), (c)) * (x) + (c)[6]) 13625c28e83SPiotr Jasiukajtis #define _POLY7(x, c) (_POLY6((x), (c)) * (x) + (c)[7]) 13725c28e83SPiotr Jasiukajtis #define _POLY8(x, c) (_POLY7((x), (c)) * (x) + (c)[8]) 13825c28e83SPiotr Jasiukajtis #define _POLY9(x, c) (_POLY8((x), (c)) * (x) + (c)[9]) 13925c28e83SPiotr Jasiukajtis #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */ 14025c28e83SPiotr Jasiukajtis 14125c28e83SPiotr Jasiukajtis /* 14225c28e83SPiotr Jasiukajtis * SVID & X/Open 14325c28e83SPiotr Jasiukajtis */ 14425c28e83SPiotr Jasiukajtis /* BEGIN adopted by C99 */ 1459938df9eSRichard Lowe extern double erf(double); 1469938df9eSRichard Lowe extern double erfc(double); 1479938df9eSRichard Lowe extern double hypot(double, double); 1489938df9eSRichard Lowe extern double lgamma(double); 14925c28e83SPiotr Jasiukajtis 15025c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 15125c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(erf, erfc, hypot) 15225c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(erf, erfc, hypot) 15325c28e83SPiotr Jasiukajtis #pragma no_side_effect(erf, erfc, hypot) 15425c28e83SPiotr Jasiukajtis #endif 15525c28e83SPiotr Jasiukajtis 15625c28e83SPiotr Jasiukajtis #if !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && !defined(__C99FEATURES__) 1579938df9eSRichard Lowe extern int isnan(double); 15825c28e83SPiotr Jasiukajtis 15925c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(isnan) 16025c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(isnan) 16125c28e83SPiotr Jasiukajtis #pragma no_side_effect(isnan) 16225c28e83SPiotr Jasiukajtis #endif 16325c28e83SPiotr Jasiukajtis /* END adopted by C99 */ 16425c28e83SPiotr Jasiukajtis 16525c28e83SPiotr Jasiukajtis #if defined(__EXTENSIONS__) || _XOPEN_SOURCE - 0 < 600 1669938df9eSRichard Lowe extern double gamma(double); /* deprecated; use lgamma */ 16725c28e83SPiotr Jasiukajtis #endif 1689938df9eSRichard Lowe extern double j0(double); 1699938df9eSRichard Lowe extern double j1(double); 1709938df9eSRichard Lowe extern double jn(int, double); 1719938df9eSRichard Lowe extern double y0(double); 1729938df9eSRichard Lowe extern double y1(double); 1739938df9eSRichard Lowe extern double yn(int, double); 17425c28e83SPiotr Jasiukajtis 17525c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 17625c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(j0, j1, jn, y0, y1, yn) 17725c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(j0, j1, jn, y0, y1, yn) 17825c28e83SPiotr Jasiukajtis #pragma no_side_effect(j0, j1, jn, y0, y1, yn) 17925c28e83SPiotr Jasiukajtis #endif 18025c28e83SPiotr Jasiukajtis #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || \ 18125c28e83SPiotr Jasiukajtis _XOPEN_SOURCE - 0 >= 500 || \ 18225c28e83SPiotr Jasiukajtis defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 == 1 18325c28e83SPiotr Jasiukajtis /* 184*24f90e6dSGarrett D'Amore * SVID & XPG 4.2/5 - removed from XPG7. 18525c28e83SPiotr Jasiukajtis */ 186*24f90e6dSGarrett D'Amore #if !defined(_STRICT_SYMBOLS) || !defined(_XPG7) 1879938df9eSRichard Lowe extern double scalb(double, double); 188*24f90e6dSGarrett D'Amore #endif 18925c28e83SPiotr Jasiukajtis 19025c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 19125c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(scalb) 19225c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(scalb) 19325c28e83SPiotr Jasiukajtis #pragma no_side_effect(scalb) 19425c28e83SPiotr Jasiukajtis #endif 19525c28e83SPiotr Jasiukajtis 19625c28e83SPiotr Jasiukajtis /* BEGIN adopted by C99 */ 1979938df9eSRichard Lowe extern double acosh(double); 1989938df9eSRichard Lowe extern double asinh(double); 1999938df9eSRichard Lowe extern double atanh(double); 2009938df9eSRichard Lowe extern double cbrt(double); 2019938df9eSRichard Lowe extern double logb(double); 2029938df9eSRichard Lowe extern double nextafter(double, double); 2039938df9eSRichard Lowe extern double remainder(double, double); 20425c28e83SPiotr Jasiukajtis 20525c28e83SPiotr Jasiukajtis /* 20625c28e83SPiotr Jasiukajtis * XPG 4.2/5 20725c28e83SPiotr Jasiukajtis */ 2089938df9eSRichard Lowe extern double expm1(double); 2099938df9eSRichard Lowe extern int ilogb(double); 2109938df9eSRichard Lowe extern double log1p(double); 2119938df9eSRichard Lowe extern double rint(double); 21225c28e83SPiotr Jasiukajtis 21325c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 21425c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(acosh, asinh, atanh, cbrt) 21525c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(logb, nextafter, remainder) 21625c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(expm1, ilogb, log1p, rint) 21725c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(acosh, asinh, atanh, cbrt) 21825c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(logb, nextafter, remainder) 21925c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(expm1, ilogb, log1p, rint) 22025c28e83SPiotr Jasiukajtis #pragma no_side_effect(acosh, asinh, atanh, cbrt) 22125c28e83SPiotr Jasiukajtis #pragma no_side_effect(logb, nextafter, remainder) 22225c28e83SPiotr Jasiukajtis #pragma no_side_effect(expm1, ilogb, log1p, rint) 22325c28e83SPiotr Jasiukajtis #endif 22425c28e83SPiotr Jasiukajtis /* END adopted by C99 */ 22525c28e83SPiotr Jasiukajtis #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || ... */ 22625c28e83SPiotr Jasiukajtis 22725c28e83SPiotr Jasiukajtis #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) 22825c28e83SPiotr Jasiukajtis /* 22925c28e83SPiotr Jasiukajtis * SVID 23025c28e83SPiotr Jasiukajtis */ 2319938df9eSRichard Lowe extern int matherr(struct exception *); 23225c28e83SPiotr Jasiukajtis 23325c28e83SPiotr Jasiukajtis /* 23425c28e83SPiotr Jasiukajtis * IEEE Test Vector 23525c28e83SPiotr Jasiukajtis */ 2369938df9eSRichard Lowe extern double significand(double); 23725c28e83SPiotr Jasiukajtis 23825c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 23925c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(significand) 24025c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(significand) 24125c28e83SPiotr Jasiukajtis #pragma no_side_effect(significand) 24225c28e83SPiotr Jasiukajtis #endif 24325c28e83SPiotr Jasiukajtis 24425c28e83SPiotr Jasiukajtis extern int signgamf; /* deprecated; use signgam */ 24525c28e83SPiotr Jasiukajtis extern int signgaml; /* deprecated; use signgam */ 24625c28e83SPiotr Jasiukajtis 2479938df9eSRichard Lowe extern int isnanf(float); 2489938df9eSRichard Lowe extern int isnanl(long double); 2499938df9eSRichard Lowe extern float gammaf(float); /* deprecated; use lgammaf */ 2509938df9eSRichard Lowe extern float gammaf_r(float, int *); /* deprecated; use lgammaf_r */ 2519938df9eSRichard Lowe extern float j0f(float); 2529938df9eSRichard Lowe extern float j1f(float); 2539938df9eSRichard Lowe extern float jnf(int, float); 2549938df9eSRichard Lowe extern float lgammaf_r(float, int *); 2559938df9eSRichard Lowe extern float scalbf(float, float); 2569938df9eSRichard Lowe extern float significandf(float); 2579938df9eSRichard Lowe extern float y0f(float); 2589938df9eSRichard Lowe extern float y1f(float); 2599938df9eSRichard Lowe extern float ynf(int, float); 2609938df9eSRichard Lowe extern long double gammal(long double); /* deprecated; use lgammal */ 2619938df9eSRichard Lowe extern long double gammal_r(long double, int *); /* deprecated */ 2629938df9eSRichard Lowe extern long double j0l(long double); 2639938df9eSRichard Lowe extern long double j1l(long double); 2649938df9eSRichard Lowe extern long double jnl(int, long double); 2659938df9eSRichard Lowe extern long double lgammal_r(long double, int *); 2669938df9eSRichard Lowe extern long double scalbl(long double, long double); 2679938df9eSRichard Lowe extern long double significandl(long double); 2689938df9eSRichard Lowe extern long double y0l(long double); 2699938df9eSRichard Lowe extern long double y1l(long double); 2709938df9eSRichard Lowe extern long double ynl(int, long double); 27125c28e83SPiotr Jasiukajtis 27225c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 27325c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(isnanf, isnanl) 27425c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(isnanf, isnanl) 27525c28e83SPiotr Jasiukajtis #pragma no_side_effect(isnanf, isnanl) 27625c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(gammaf_r, j0f, j1f, jnf, lgammaf_r, scalbf) 27725c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(significandf, y0f, y1f, ynf) 27825c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(j0f, j1f, jnf, scalbf) 27925c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(significandf, y0f, y1f, ynf) 28025c28e83SPiotr Jasiukajtis #pragma no_side_effect(j0f, j1f, jnf, scalbf) 28125c28e83SPiotr Jasiukajtis #pragma no_side_effect(significandf, y0f, y1f, ynf) 28225c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(gammal_r, j0l, j1l, jnl, lgammal_r, scalbl) 28325c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(significandl, y0l, y1l, ynl) 28425c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(j0l, j1l, jnl, scalbl) 28525c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(significandl, y0l, y1l, ynl) 28625c28e83SPiotr Jasiukajtis #pragma no_side_effect(j0l, j1l, jnl, scalbl) 28725c28e83SPiotr Jasiukajtis #pragma no_side_effect(significandl, y0l, y1l, ynl) 28825c28e83SPiotr Jasiukajtis #endif 28925c28e83SPiotr Jasiukajtis 29025c28e83SPiotr Jasiukajtis /* 29125c28e83SPiotr Jasiukajtis * for sin+cos->sincos transformation 29225c28e83SPiotr Jasiukajtis */ 2939938df9eSRichard Lowe extern void sincos(double, double *, double *); 2949938df9eSRichard Lowe extern void sincosf(float, float *, float *); 2959938df9eSRichard Lowe extern void sincosl(long double, long double *, long double *); 29625c28e83SPiotr Jasiukajtis 29725c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 29825c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(sincos, sincosf, sincosl) 29925c28e83SPiotr Jasiukajtis #endif 30025c28e83SPiotr Jasiukajtis 30125c28e83SPiotr Jasiukajtis /* BEGIN adopted by C99 */ 30225c28e83SPiotr Jasiukajtis /* 30325c28e83SPiotr Jasiukajtis * Functions callable from C, intended to support IEEE arithmetic. 30425c28e83SPiotr Jasiukajtis */ 3059938df9eSRichard Lowe extern double copysign(double, double); 3069938df9eSRichard Lowe extern double scalbn(double, int); 30725c28e83SPiotr Jasiukajtis 30825c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 30925c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(copysign, scalbn) 31025c28e83SPiotr Jasiukajtis #pragma does_not_write_global_data(copysign, scalbn) 31125c28e83SPiotr Jasiukajtis #pragma no_side_effect(copysign, scalbn) 31225c28e83SPiotr Jasiukajtis #endif 31325c28e83SPiotr Jasiukajtis /* END adopted by C99 */ 31425c28e83SPiotr Jasiukajtis 31525c28e83SPiotr Jasiukajtis /* 31625c28e83SPiotr Jasiukajtis * Reentrant version of gamma & lgamma; passes signgam back by reference 31725c28e83SPiotr Jasiukajtis * as the second argument; user must allocate space for signgam. 31825c28e83SPiotr Jasiukajtis */ 3199938df9eSRichard Lowe extern double gamma_r(double, int *); /* deprecated; use lgamma_r */ 3209938df9eSRichard Lowe extern double lgamma_r(double, int *); 32125c28e83SPiotr Jasiukajtis 32225c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 32325c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(gamma_r, lgamma_r) 32425c28e83SPiotr Jasiukajtis #endif 32525c28e83SPiotr Jasiukajtis 32625c28e83SPiotr Jasiukajtis /* BEGIN adopted by C99 */ 3279938df9eSRichard Lowe extern float modff(float, float *); 32825c28e83SPiotr Jasiukajtis 32925c28e83SPiotr Jasiukajtis #if defined(__MATHERR_ERRNO_DONTCARE) 33025c28e83SPiotr Jasiukajtis #pragma does_not_read_global_data(modff) 33125c28e83SPiotr Jasiukajtis #endif 33225c28e83SPiotr Jasiukajtis /* END adopted by C99 */ 33325c28e83SPiotr Jasiukajtis 33425c28e83SPiotr Jasiukajtis #if defined(__EXTENSIONS__) || !defined(__cplusplus) 33525c28e83SPiotr Jasiukajtis #include <floatingpoint.h> 33625c28e83SPiotr Jasiukajtis #endif 33725c28e83SPiotr Jasiukajtis #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */ 33825c28e83SPiotr Jasiukajtis #endif /* defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) || ... */ 33925c28e83SPiotr Jasiukajtis 34025c28e83SPiotr Jasiukajtis #if defined(__cplusplus) && defined(__GNUC__) 34125c28e83SPiotr Jasiukajtis #undef exception 34225c28e83SPiotr Jasiukajtis #endif 34325c28e83SPiotr Jasiukajtis 34425c28e83SPiotr Jasiukajtis #ifdef __cplusplus 34525c28e83SPiotr Jasiukajtis } 34625c28e83SPiotr Jasiukajtis #endif 34725c28e83SPiotr Jasiukajtis 34825c28e83SPiotr Jasiukajtis #endif /* _MATH_H */ 349