xref: /illumos-gate/usr/src/head/math.h (revision 24f90e6d0193ecf0799ac0dee495a53a3e7ee9fa)
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