xref: /freebsd/lib/msun/src/math.h (revision ef1ee63e3cf22100f1aab5d677e62ae054b60700)
13a8617a8SJordan K. Hubbard /*
23a8617a8SJordan K. Hubbard  * ====================================================
33a8617a8SJordan K. Hubbard  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
43a8617a8SJordan K. Hubbard  *
53a8617a8SJordan K. Hubbard  * Developed at SunPro, a Sun Microsystems, Inc. business.
63a8617a8SJordan K. Hubbard  * Permission to use, copy, modify, and distribute this
73a8617a8SJordan K. Hubbard  * software is freely granted, provided that this notice
83a8617a8SJordan K. Hubbard  * is preserved.
93a8617a8SJordan K. Hubbard  * ====================================================
103a8617a8SJordan K. Hubbard  */
113a8617a8SJordan K. Hubbard 
123a8617a8SJordan K. Hubbard /*
133a8617a8SJordan K. Hubbard  * from: @(#)fdlibm.h 5.1 93/09/24
147f3dea24SPeter Wemm  * $FreeBSD$
153a8617a8SJordan K. Hubbard  */
163a8617a8SJordan K. Hubbard 
173a8617a8SJordan K. Hubbard #ifndef _MATH_H_
183a8617a8SJordan K. Hubbard #define	_MATH_H_
193a8617a8SJordan K. Hubbard 
203a8617a8SJordan K. Hubbard /*
213a8617a8SJordan K. Hubbard  * ANSI/POSIX
223a8617a8SJordan K. Hubbard  */
233a8617a8SJordan K. Hubbard extern char __infinity[];
243a8617a8SJordan K. Hubbard #define HUGE_VAL	(*(double *) __infinity)
253a8617a8SJordan K. Hubbard 
263a8617a8SJordan K. Hubbard /*
273a8617a8SJordan K. Hubbard  * XOPEN/SVID
283a8617a8SJordan K. Hubbard  */
293a8617a8SJordan K. Hubbard #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
303a8617a8SJordan K. Hubbard #define	M_E		2.7182818284590452354	/* e */
313a8617a8SJordan K. Hubbard #define	M_LOG2E		1.4426950408889634074	/* log 2e */
323a8617a8SJordan K. Hubbard #define	M_LOG10E	0.43429448190325182765	/* log 10e */
333a8617a8SJordan K. Hubbard #define	M_LN2		0.69314718055994530942	/* log e2 */
343a8617a8SJordan K. Hubbard #define	M_LN10		2.30258509299404568402	/* log e10 */
353a8617a8SJordan K. Hubbard #define	M_PI		3.14159265358979323846	/* pi */
363a8617a8SJordan K. Hubbard #define	M_PI_2		1.57079632679489661923	/* pi/2 */
373a8617a8SJordan K. Hubbard #define	M_PI_4		0.78539816339744830962	/* pi/4 */
383a8617a8SJordan K. Hubbard #define	M_1_PI		0.31830988618379067154	/* 1/pi */
393a8617a8SJordan K. Hubbard #define	M_2_PI		0.63661977236758134308	/* 2/pi */
403a8617a8SJordan K. Hubbard #define	M_2_SQRTPI	1.12837916709551257390	/* 2/sqrt(pi) */
413a8617a8SJordan K. Hubbard #define	M_SQRT2		1.41421356237309504880	/* sqrt(2) */
423a8617a8SJordan K. Hubbard #define	M_SQRT1_2	0.70710678118654752440	/* 1/sqrt(2) */
433a8617a8SJordan K. Hubbard 
443a8617a8SJordan K. Hubbard #define	MAXFLOAT	((float)3.40282346638528860e+38)
453a8617a8SJordan K. Hubbard extern int signgam;
463a8617a8SJordan K. Hubbard 
473a8617a8SJordan K. Hubbard #if !defined(_XOPEN_SOURCE)
483a8617a8SJordan K. Hubbard enum fdversion {fdlibm_ieee = -1, fdlibm_svid, fdlibm_xopen, fdlibm_posix};
493a8617a8SJordan K. Hubbard 
503a8617a8SJordan K. Hubbard #define _LIB_VERSION_TYPE enum fdversion
513a8617a8SJordan K. Hubbard #define _LIB_VERSION _fdlib_version
523a8617a8SJordan K. Hubbard 
533a8617a8SJordan K. Hubbard /* if global variable _LIB_VERSION is not desirable, one may
543a8617a8SJordan K. Hubbard  * change the following to be a constant by:
553a8617a8SJordan K. Hubbard  *	#define _LIB_VERSION_TYPE const enum version
563a8617a8SJordan K. Hubbard  * In that case, after one initializes the value _LIB_VERSION (see
573a8617a8SJordan K. Hubbard  * s_lib_version.c) during compile time, it cannot be modified
583a8617a8SJordan K. Hubbard  * in the middle of a program
593a8617a8SJordan K. Hubbard  */
603a8617a8SJordan K. Hubbard extern  _LIB_VERSION_TYPE  _LIB_VERSION;
613a8617a8SJordan K. Hubbard 
623a8617a8SJordan K. Hubbard #define _IEEE_  fdlibm_ieee
633a8617a8SJordan K. Hubbard #define _SVID_  fdlibm_svid
643a8617a8SJordan K. Hubbard #define _XOPEN_ fdlibm_xopen
653a8617a8SJordan K. Hubbard #define _POSIX_ fdlibm_posix
663a8617a8SJordan K. Hubbard 
67d6f56cfcSDavid E. O'Brien /* We have a problem when using C++ since `exception' is a reserved
68d6f56cfcSDavid E. O'Brien    name in C++.  */
696a9280beSBruce Evans #ifndef __cplusplus
703a8617a8SJordan K. Hubbard struct exception {
713a8617a8SJordan K. Hubbard 	int type;
723a8617a8SJordan K. Hubbard 	char *name;
733a8617a8SJordan K. Hubbard 	double arg1;
743a8617a8SJordan K. Hubbard 	double arg2;
753a8617a8SJordan K. Hubbard 	double retval;
763a8617a8SJordan K. Hubbard };
776a9280beSBruce Evans #endif
783a8617a8SJordan K. Hubbard 
793a8617a8SJordan K. Hubbard #define	HUGE		MAXFLOAT
803a8617a8SJordan K. Hubbard 
813a8617a8SJordan K. Hubbard /*
823a8617a8SJordan K. Hubbard  * set X_TLOSS = pi*2**52, which is possibly defined in <values.h>
833a8617a8SJordan K. Hubbard  * (one may replace the following line by "#include <values.h>")
843a8617a8SJordan K. Hubbard  */
853a8617a8SJordan K. Hubbard 
863a8617a8SJordan K. Hubbard #define X_TLOSS		1.41484755040568800000e+16
873a8617a8SJordan K. Hubbard 
883a8617a8SJordan K. Hubbard #define	DOMAIN		1
893a8617a8SJordan K. Hubbard #define	SING		2
903a8617a8SJordan K. Hubbard #define	OVERFLOW	3
913a8617a8SJordan K. Hubbard #define	UNDERFLOW	4
923a8617a8SJordan K. Hubbard #define	TLOSS		5
933a8617a8SJordan K. Hubbard #define	PLOSS		6
943a8617a8SJordan K. Hubbard 
953a8617a8SJordan K. Hubbard #endif /* !_XOPEN_SOURCE */
963a8617a8SJordan K. Hubbard #endif /* !_ANSI_SOURCE && !_POSIX_SOURCE */
973a8617a8SJordan K. Hubbard 
983a8617a8SJordan K. Hubbard 
993a8617a8SJordan K. Hubbard #include <sys/cdefs.h>
1003a8617a8SJordan K. Hubbard /*
1013a8617a8SJordan K. Hubbard  * ANSI/POSIX
1023a8617a8SJordan K. Hubbard  */
103ef1ee63eSAlexey Zelkin __BEGIN_DECLS
104ef1ee63eSAlexey Zelkin double	acos __P((double));
105ef1ee63eSAlexey Zelkin double	asin __P((double));
106ef1ee63eSAlexey Zelkin double	atan __P((double));
107ef1ee63eSAlexey Zelkin double	atan2 __P((double, double));
108ef1ee63eSAlexey Zelkin double	cos __P((double));
109ef1ee63eSAlexey Zelkin double	sin __P((double));
110ef1ee63eSAlexey Zelkin double	tan __P((double));
1113a8617a8SJordan K. Hubbard 
112ef1ee63eSAlexey Zelkin double	cosh __P((double));
113ef1ee63eSAlexey Zelkin double	sinh __P((double));
114ef1ee63eSAlexey Zelkin double	tanh __P((double));
1153a8617a8SJordan K. Hubbard 
116ef1ee63eSAlexey Zelkin double	exp __P((double));
117ef1ee63eSAlexey Zelkin double	frexp __P((double, int *));
118ef1ee63eSAlexey Zelkin double	ldexp __P((double, int));
119ef1ee63eSAlexey Zelkin double	log __P((double));
120ef1ee63eSAlexey Zelkin double	log10 __P((double));
121ef1ee63eSAlexey Zelkin double	modf __P((double, double *));
1223a8617a8SJordan K. Hubbard 
123ef1ee63eSAlexey Zelkin double	pow __P((double, double));
124ef1ee63eSAlexey Zelkin double	sqrt __P((double));
1253a8617a8SJordan K. Hubbard 
126ef1ee63eSAlexey Zelkin double	ceil __P((double));
127ef1ee63eSAlexey Zelkin double	fabs __P((double));
128ef1ee63eSAlexey Zelkin double	floor __P((double));
129ef1ee63eSAlexey Zelkin double	fmod __P((double, double));
1303a8617a8SJordan K. Hubbard 
1313a8617a8SJordan K. Hubbard #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
132ef1ee63eSAlexey Zelkin double	erf __P((double));
133ef1ee63eSAlexey Zelkin double	erfc __P((double));
134ef1ee63eSAlexey Zelkin double	gamma __P((double));
135ef1ee63eSAlexey Zelkin double	hypot __P((double, double));
136ef1ee63eSAlexey Zelkin int	isinf __P((double));
137ef1ee63eSAlexey Zelkin int	isnan __P((double));
138ef1ee63eSAlexey Zelkin int	finite __P((double));
139ef1ee63eSAlexey Zelkin double	j0 __P((double));
140ef1ee63eSAlexey Zelkin double	j1 __P((double));
141ef1ee63eSAlexey Zelkin double	jn __P((int, double));
142ef1ee63eSAlexey Zelkin double	lgamma __P((double));
143ef1ee63eSAlexey Zelkin double	y0 __P((double));
144ef1ee63eSAlexey Zelkin double	y1 __P((double));
145ef1ee63eSAlexey Zelkin double	yn __P((int, double));
1463a8617a8SJordan K. Hubbard 
1473a8617a8SJordan K. Hubbard #if !defined(_XOPEN_SOURCE)
148ef1ee63eSAlexey Zelkin double	acosh __P((double));
149ef1ee63eSAlexey Zelkin double	asinh __P((double));
150ef1ee63eSAlexey Zelkin double	atanh __P((double));
151ef1ee63eSAlexey Zelkin double	cbrt __P((double));
152ef1ee63eSAlexey Zelkin double	logb __P((double));
153ef1ee63eSAlexey Zelkin double	nextafter __P((double, double));
154ef1ee63eSAlexey Zelkin double	remainder __P((double, double));
155ef1ee63eSAlexey Zelkin double	scalb __P((double, double));
1563a8617a8SJordan K. Hubbard 
1576a9280beSBruce Evans #ifndef __cplusplus
158ef1ee63eSAlexey Zelkin int	matherr __P((struct exception *));
1596a9280beSBruce Evans #endif
1603a8617a8SJordan K. Hubbard 
1613a8617a8SJordan K. Hubbard /*
1623a8617a8SJordan K. Hubbard  * IEEE Test Vector
1633a8617a8SJordan K. Hubbard  */
164ef1ee63eSAlexey Zelkin double	significand __P((double));
1653a8617a8SJordan K. Hubbard 
1663a8617a8SJordan K. Hubbard /*
1673a8617a8SJordan K. Hubbard  * Functions callable from C, intended to support IEEE arithmetic.
1683a8617a8SJordan K. Hubbard  */
169ef1ee63eSAlexey Zelkin double	copysign __P((double, double));
170ef1ee63eSAlexey Zelkin int	ilogb __P((double));
171ef1ee63eSAlexey Zelkin double	rint __P((double));
172ef1ee63eSAlexey Zelkin double	scalbn __P((double, int));
1733a8617a8SJordan K. Hubbard 
1743a8617a8SJordan K. Hubbard /*
1753a8617a8SJordan K. Hubbard  * BSD math library entry points
1763a8617a8SJordan K. Hubbard  */
177ef1ee63eSAlexey Zelkin double	drem __P((double, double));
178ef1ee63eSAlexey Zelkin double	expm1 __P((double));
179ef1ee63eSAlexey Zelkin double	log1p __P((double));
1803a8617a8SJordan K. Hubbard 
1813a8617a8SJordan K. Hubbard /*
1823a8617a8SJordan K. Hubbard  * Reentrant version of gamma & lgamma; passes signgam back by reference
1833a8617a8SJordan K. Hubbard  * as the second argument; user must allocate space for signgam.
1843a8617a8SJordan K. Hubbard  */
1853a8617a8SJordan K. Hubbard #ifdef _REENTRANT
186ef1ee63eSAlexey Zelkin double	gamma_r __P((double, int *));
187ef1ee63eSAlexey Zelkin double	lgamma_r __P((double, int *));
1883a8617a8SJordan K. Hubbard #endif /* _REENTRANT */
1893a8617a8SJordan K. Hubbard 
1903a8617a8SJordan K. Hubbard /* float versions of ANSI/POSIX functions */
191ef1ee63eSAlexey Zelkin float	acosf __P((float));
192ef1ee63eSAlexey Zelkin float	asinf __P((float));
193ef1ee63eSAlexey Zelkin float	atanf __P((float));
194ef1ee63eSAlexey Zelkin float	atan2f __P((float, float));
195ef1ee63eSAlexey Zelkin float	cosf __P((float));
196ef1ee63eSAlexey Zelkin float	sinf __P((float));
197ef1ee63eSAlexey Zelkin float	tanf __P((float));
1983a8617a8SJordan K. Hubbard 
199ef1ee63eSAlexey Zelkin float	coshf __P((float));
200ef1ee63eSAlexey Zelkin float	sinhf __P((float));
201ef1ee63eSAlexey Zelkin float	tanhf __P((float));
2023a8617a8SJordan K. Hubbard 
203ef1ee63eSAlexey Zelkin float	expf __P((float));
204ef1ee63eSAlexey Zelkin float	frexpf __P((float, int *));
205ef1ee63eSAlexey Zelkin float	ldexpf __P((float, int));
206ef1ee63eSAlexey Zelkin float	logf __P((float));
207ef1ee63eSAlexey Zelkin float	log10f __P((float));
208ef1ee63eSAlexey Zelkin float	modff __P((float, float *));
2093a8617a8SJordan K. Hubbard 
210ef1ee63eSAlexey Zelkin float	powf __P((float, float));
211ef1ee63eSAlexey Zelkin float	sqrtf __P((float));
2123a8617a8SJordan K. Hubbard 
213ef1ee63eSAlexey Zelkin float	ceilf __P((float));
214ef1ee63eSAlexey Zelkin float	fabsf __P((float));
215ef1ee63eSAlexey Zelkin float	floorf __P((float));
216ef1ee63eSAlexey Zelkin float	fmodf __P((float, float));
2173a8617a8SJordan K. Hubbard 
218ef1ee63eSAlexey Zelkin float	erff __P((float));
219ef1ee63eSAlexey Zelkin float	erfcf __P((float));
220ef1ee63eSAlexey Zelkin float	gammaf __P((float));
221ef1ee63eSAlexey Zelkin float	hypotf __P((float, float));
222ef1ee63eSAlexey Zelkin int	isnanf __P((float));
223ef1ee63eSAlexey Zelkin int	finitef __P((float));
224ef1ee63eSAlexey Zelkin float	j0f __P((float));
225ef1ee63eSAlexey Zelkin float	j1f __P((float));
226ef1ee63eSAlexey Zelkin float	jnf __P((int, float));
227ef1ee63eSAlexey Zelkin float	lgammaf __P((float));
228ef1ee63eSAlexey Zelkin float	y0f __P((float));
229ef1ee63eSAlexey Zelkin float	y1f __P((float));
230ef1ee63eSAlexey Zelkin float	ynf __P((int, float));
2313a8617a8SJordan K. Hubbard 
232ef1ee63eSAlexey Zelkin float	acoshf __P((float));
233ef1ee63eSAlexey Zelkin float	asinhf __P((float));
234ef1ee63eSAlexey Zelkin float	atanhf __P((float));
235ef1ee63eSAlexey Zelkin float	cbrtf __P((float));
236ef1ee63eSAlexey Zelkin float	logbf __P((float));
237ef1ee63eSAlexey Zelkin float	nextafterf __P((float, float));
238ef1ee63eSAlexey Zelkin float	remainderf __P((float, float));
239ef1ee63eSAlexey Zelkin float	scalbf __P((float, float));
2403a8617a8SJordan K. Hubbard 
2413a8617a8SJordan K. Hubbard /*
2423a8617a8SJordan K. Hubbard  * float version of IEEE Test Vector
2433a8617a8SJordan K. Hubbard  */
244ef1ee63eSAlexey Zelkin float	significandf __P((float));
2453a8617a8SJordan K. Hubbard 
2463a8617a8SJordan K. Hubbard /*
2473a8617a8SJordan K. Hubbard  * Float versions of functions callable from C, intended to support
2483a8617a8SJordan K. Hubbard  * IEEE arithmetic.
2493a8617a8SJordan K. Hubbard  */
250ef1ee63eSAlexey Zelkin float	copysignf __P((float, float));
251ef1ee63eSAlexey Zelkin int	ilogbf __P((float));
252ef1ee63eSAlexey Zelkin float	rintf __P((float));
253ef1ee63eSAlexey Zelkin float	scalbnf __P((float, int));
2543a8617a8SJordan K. Hubbard 
2553a8617a8SJordan K. Hubbard /*
2563a8617a8SJordan K. Hubbard  * float versions of BSD math library entry points
2573a8617a8SJordan K. Hubbard  */
258ef1ee63eSAlexey Zelkin float	dremf __P((float, float));
259ef1ee63eSAlexey Zelkin float	expm1f __P((float));
260ef1ee63eSAlexey Zelkin float	log1pf __P((float));
2613a8617a8SJordan K. Hubbard 
2623a8617a8SJordan K. Hubbard /*
2633a8617a8SJordan K. Hubbard  * Float versions of reentrant version of gamma & lgamma; passes
2643a8617a8SJordan K. Hubbard  * signgam back by reference as the second argument; user must
2653a8617a8SJordan K. Hubbard  * allocate space for signgam.
2663a8617a8SJordan K. Hubbard  */
2673a8617a8SJordan K. Hubbard #ifdef _REENTRANT
268ef1ee63eSAlexey Zelkin float	gammaf_r __P((float, int *));
269ef1ee63eSAlexey Zelkin float	lgammaf_r __P((float, int *));
2703a8617a8SJordan K. Hubbard #endif	/* _REENTRANT */
2713a8617a8SJordan K. Hubbard 
2723a8617a8SJordan K. Hubbard #endif /* !_XOPEN_SOURCE */
2733a8617a8SJordan K. Hubbard #endif /* !_ANSI_SOURCE && !_POSIX_SOURCE */
2743a8617a8SJordan K. Hubbard __END_DECLS
2753a8617a8SJordan K. Hubbard 
276ef1ee63eSAlexey Zelkin #endif /* !_MATH_H_ */
277