11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ====================================================
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Developed at SunPro, a Sun Microsystems, Inc. business.
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Permission to use, copy, modify, and distribute this
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * software is freely granted, provided that this notice
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * is preserved.
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ====================================================
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * from: @(#)fdlibm.h 5.1 93/09/24
14a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * $FreeBSD$
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _MATH_H_
18b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#define _MATH_H_
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h>
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <limits.h>
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
23de9ac710534626e6796ea885f8480fc4cfd64158Elliott Hughes__BEGIN_DECLS
24de9ac710534626e6796ea885f8480fc4cfd64158Elliott Hughes
2550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes/* C11. */
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughestypedef double __double_t;
2850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughestypedef __double_t double_t;
2950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughestypedef float __float_t;
3050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughestypedef __float_t float_t;
3150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
3250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define HUGE_VAL __builtin_huge_val()
3350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define HUGE_VALF __builtin_huge_valf()
3450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define HUGE_VALL __builtin_huge_vall()
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define INFINITY __builtin_inff()
371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define NAN __builtin_nanf("")
3950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
4050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define FP_INFINITE 0x01
4150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define FP_NAN 0x02
4250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define FP_NORMAL 0x04
4350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define FP_SUBNORMAL 0x08
4450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define FP_ZERO 0x10
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
46b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#if defined(__FP_FAST_FMA)
47b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#define FP_FAST_FMA 1
48b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#endif
49b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#if defined(__FP_FAST_FMAF)
50b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#define FP_FAST_FMAF 1
51b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#endif
52b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#if defined(__FP_FAST_FMAL)
53b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#define FP_FAST_FMAL 1
541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
5650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define FP_ILOGB0 (-INT_MAX)
5750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define FP_ILOGBNAN INT_MAX
5850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
5950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define MATH_ERRNO 1
6050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define MATH_ERREXCEPT 2
6150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define math_errhandling MATH_ERREXCEPT
6250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
6350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define fpclassify(x) __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)
64b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes
65b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#define isfinite(x) __builtin_isfinite(x)
6650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
67b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#define isinf(x) __builtin_isinf(x)
6850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
69b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#define isnan(x) __builtin_isnan(x)
70b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes
7150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define isnormal(x) __builtin_isnormal(x)
72b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes
73b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes#define signbit(x) \
74b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes    ((sizeof(x) == sizeof(float)) ? __builtin_signbitf(x) \
75b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes    : (sizeof(x) == sizeof(double)) ? __builtin_signbit(x) \
76b662280aaff801ef936fbfab34dd1596acce945eElliott Hughes    : __builtin_signbitl(x))
771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
78684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble acos(double __x);
7950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat acosf(float __x);
8050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double acosl(long double __x) __RENAME_LDBL(acos, 3, 21);
8150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
82684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble asin(double __x);
8350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat asinf(float __x);
8450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double asinl(long double __x) __RENAME_LDBL(asin, 3, 21);
8550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
86684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble atan(double __x);
8750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat atanf(float __x);
8850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double atanl(long double __x) __RENAME_LDBL(atan, 3, 21);
8950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
90684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble atan2(double __y, double __x);
9150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat atan2f(float __y, float __x);
9250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double atan2l(long double __y, long double __x) __RENAME_LDBL(atan2, 3, 21);
9350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
94684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble cos(double __x);
9550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat cosf(float __x);
9650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double cosl(long double __x) __RENAME_LDBL(cos, 3, 21);
9750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
98684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble sin(double __x);
9950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat sinf(float __x);
10050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double sinl(long double __x) __RENAME_LDBL(sin, 3, 21);
10150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
102684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble tan(double __x);
10350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat tanf(float __x);
10450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double tanl(long double __x) __RENAME_LDBL(tan, 3, 21);
10550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
10650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble acosh(double __x);
10750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat acoshf(float __x);
10850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double acoshl(long double __x) __RENAME_LDBL(acosh, 3, 21);
10950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
11050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble asinh(double __x);
11150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat asinhf(float __x);
11250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double asinhl(long double __x) __RENAME_LDBL(asinh, 3, 21);
11350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
11450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble atanh(double __x);
11550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat atanhf(float __x);
11650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double atanhl(long double __x) __RENAME_LDBL(atanh, 3, 21);
117684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
118684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble cosh(double __x);
11950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat coshf(float __x);
12050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double coshl(long double __x) __RENAME_LDBL(cosh, 3, 21);
12150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
122684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble sinh(double __x);
12350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat sinhf(float __x);
12450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double sinhl(long double __x) __RENAME_LDBL(sinh, 3, 21);
12550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
126684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble tanh(double __x);
12750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat tanhf(float __x);
12850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double tanhl(long double __x) __RENAME_LDBL(tanh, 3, 21);
129684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
130684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble exp(double __x);
13150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat expf(float __x);
13250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double expl(long double __x) __RENAME_LDBL(exp, 3, 21);
133684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
134684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble exp2(double __x);
13550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat exp2f(float __x);
13650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double exp2l(long double __x) __RENAME_LDBL(exp2, 3, 21);
13750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
138684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble expm1(double __x);
13950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat expm1f(float __x);
14050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double expm1l(long double __x) __RENAME_LDBL(expm1, 3, 21);
14150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
14250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble frexp(double __x, int* __exponent);
14350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat frexpf(float __x, int* __exponent);
14450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double frexpl(long double __x, int* __exponent) __RENAME_LDBL(frexp, 3, 21);
14550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
146684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesint ilogb(double __x) __attribute_const__;
14750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesint ilogbf(float __x) __attribute_const__;
148d6541c2a97faa1f6401627f4661175b72b53839aElliott Hughesint ilogbl(long double __x) __RENAME_LDBL(ilogb, 3, 3) __attribute_const__;
14950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
15050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble ldexp(double __x, int __exponent);
15150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat ldexpf(float __x, int __exponent);
15250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double ldexpl(long double __x, int __exponent) __RENAME_LDBL(ldexp, 3, 3);
15350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
15450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble log(double __x);
15550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat logf(float __x);
15650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double logl(long double __x) __RENAME_LDBL(log, 3, 21);
15750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
15850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble log10(double __x);
15950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat log10f(float __x);
16050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double log10l(long double __x) __RENAME_LDBL(log10, 3, 21);
16150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
162684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble log1p(double __x);
16350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat log1pf(float __x);
16450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double log1pl(long double __x) __RENAME_LDBL(log1p, 3, 21);
16550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
166684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble log2(double __x) __INTRODUCED_IN(18);
16750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat log2f(float __x) __INTRODUCED_IN(18);
16850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double log2l(long double __x) __RENAME_LDBL(log2, 18, 18);
16946b44160e9e4c466be0faf1bb8d6ec70ecc83273Josh Gao
17050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble logb(double __x);
17150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat logbf(float __x);
17250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double logbl(long double __x) __RENAME_LDBL(logb, 3, 18);
173284c8f1bafd53777c262ee29f941644747eb4ad9Dan Albert
17450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble modf(double __x, double* __integral_part);
17550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat modff(float __x, float* __integral_part);
17650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double modfl(long double __x, long double* __integral_part) __RENAME_LDBL(modf, 3, 21);
17746b44160e9e4c466be0faf1bb8d6ec70ecc83273Josh Gao
17850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble scalbn(double __x, int __exponent);
17950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat scalbnf(float __x, int __exponent);
18050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double scalbnl(long double __x, int __exponent) __RENAME_LDBL(scalbn, 3, 3);
181684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
18250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes/* TODO: once the NDK only supports >= 18, use __RENAME_LDBL here too. */
183684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble scalbln(double __x, long __exponent) __INTRODUCED_IN_X86(18) __VERSIONER_NO_GUARD;
18450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat scalblnf(float __x, long __exponent) __INTRODUCED_IN_X86(18) __VERSIONER_NO_GUARD;
18550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double scalblnl(long double __x, long __exponent) __INTRODUCED_IN_X86(18) __VERSIONER_NO_GUARD;
186684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
18750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble cbrt(double __x);
18850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat cbrtf(float __x);
18950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double cbrtl(long double __x) __RENAME_LDBL(cbrt, 3, 21);
190684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
19150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble fabs(double __x) __attribute_const__;
19250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat fabsf(float __x) __attribute_const__;
193d6541c2a97faa1f6401627f4661175b72b53839aElliott Hugheslong double fabsl(long double __x) __RENAME_LDBL(fabs, 3, 3) __attribute_const__;
194684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
19550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble hypot(double __x, double __y);
19650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat hypotf(float __x, float __y);
19750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double hypotl(long double __x, long double __y) __RENAME_LDBL(hypot, 3, 21);
198684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
19950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble pow(double __x, double __y);
200684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat powf(float __x, float __y);
20150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double powl(long double __x, long double __y) __RENAME_LDBL(pow, 3, 21);
202684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
20350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble sqrt(double __x);
20450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat sqrtf(float __x);
20550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double sqrtl(long double __x) __RENAME_LDBL(sqrt, 3, 21);
206684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
20750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble erf(double __x);
208684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat erff(float __x);
20950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double erfl(long double __x) __RENAME_LDBL(erf, 3, 21);
21050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
21150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble erfc(double __x);
212684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat erfcf(float __x);
21350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double erfcl(long double __x) __RENAME_LDBL(erfc, 3, 21);
21450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
21550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble lgamma(double __x);
216684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat lgammaf(float __x);
21750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double lgammal(long double __x) __RENAME_LDBL(lgamma, 3, 21);
21850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
21950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble tgamma(double __x);
220684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat tgammaf(float __x) __INTRODUCED_IN_ARM(13) __INTRODUCED_IN_MIPS(13) __INTRODUCED_IN_X86(9);
22150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double tgammal(long double __x) __RENAME_LDBL(tgamma, 3, 21);
222684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
22350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble ceil(double __x);
22450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat ceilf(float __x);
22550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double ceill(long double __x) __RENAME_LDBL(ceil, 3, 3);
22650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
22750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble floor(double __x);
22850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat floorf(float __x);
22950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double floorl(long double __x) __RENAME_LDBL(floor, 3, 3);
23050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
23150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble nearbyint(double __x);
23250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat nearbyintf(float __x);
23350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double nearbyintl(long double __x) __RENAME_LDBL(nearbyint, 3, 21);
23450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
23550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble rint(double __x);
23650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat rintf(float __x);
23750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double rintl(long double __x) __RENAME_LDBL(rint, 3, 21);
23850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
23950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong lrint(double __x);
240684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hugheslong lrintf(float __x);
24150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong lrintl(long double __x) __RENAME_LDBL(lrint, 3, 21);
24250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
24350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong long llrint(double __x);
24450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong long llrintf(float __x);
24550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong long llrintl(long double __x) __RENAME_LDBL(llrint, 3, 21);
24650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
24750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble round(double __x);
24850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat roundf(float __x);
24950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double roundl(long double __x) __RENAME_LDBL(roundl, 3, 3);
25050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
25150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong lround(double __x);
252684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hugheslong lroundf(float __x);
25350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong lroundl(long double __x) __RENAME_LDBL(lround, 3, 3);
25450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
25550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong long llround(double __x);
25650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong long llroundf(float __x);
25750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong long llroundl(long double __x) __RENAME_LDBL(llround, 3, 3);
25850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
25950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble trunc(double __x);
26050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat truncf(float __x);
26150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double truncl(long double __x) __RENAME_LDBL(trunc, 3, 3);
26250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
26350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble fmod(double __x, double __y);
26450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat fmodf(float __x, float __y);
26550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double fmodl(long double __x, long double __y) __RENAME_LDBL(fmod, 3, 21);
26650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
26750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble remainder(double __x, double __y);
268684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat remainderf(float __x, float __y);
26950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double remainderl(long double __x, long double __y) __RENAME_LDBL(remainder, 3, 21);
27050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
27150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble remquo(double __x, double __y, int* __quotient_bits);
272684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat remquof(float __x, float __y, int* __quotient_bits);
27350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double remquol(long double __x, long double __y, int* __quotient_bits) __RENAME_LDBL(remquo, 3, 21);
27450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
27550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble copysign(double __value, double __sign) __attribute_const__;
27650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat copysignf(float __value, float __sign) __attribute_const__;
277d6541c2a97faa1f6401627f4661175b72b53839aElliott Hugheslong double copysignl(long double __value, long double __sign) __RENAME_LDBL(copysign, 3, 3) __attribute_const__;
27850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
27950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble nan(const char* __kind) __attribute_const__ __INTRODUCED_IN_ARM(13) __INTRODUCED_IN_MIPS(13) __INTRODUCED_IN_X86(9);
28050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat nanf(const char* __kind) __attribute_const__ __INTRODUCED_IN_ARM(13) __INTRODUCED_IN_MIPS(13) __INTRODUCED_IN_X86(9);
281d6541c2a97faa1f6401627f4661175b72b53839aElliott Hugheslong double nanl(const char* __kind) __RENAME_LDBL(nan, 13, 13) __attribute_const__;
28250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
28350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble nextafter(double __x, double __y);
28450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat nextafterf(float __x, float __y);
28550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double nextafterl(long double __x, long double __y) __RENAME_LDBL(nextafter, 3, 21) __VERSIONER_NO_GUARD;
286684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
28750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble nexttoward(double __x, long double __y) __INTRODUCED_IN(18) __VERSIONER_NO_GUARD;
28850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat nexttowardf(float __x, long double __y);
28950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double nexttowardl(long double __x, long double __y) __RENAME_LDBL(nexttoward, 18, 18) __VERSIONER_NO_GUARD;
29050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
29150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble fdim(double __x, double __y);
292684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat fdimf(float __x, float __y);
29350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double fdiml(long double __x, long double __y) __RENAME_LDBL(fdim, 3, 3);
29450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
29550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble fmax(double __x, double __y) __attribute_const__;
296684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat fmaxf(float __x, float __y) __attribute_const__;
297d6541c2a97faa1f6401627f4661175b72b53839aElliott Hugheslong double fmaxl(long double __x, long double __y) __RENAME_LDBL(fmax, 3, 3) __attribute_const__;
29850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
29950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble fmin(double __x, double __y) __attribute_const__;
300684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat fminf(float __x, float __y) __attribute_const__;
301d6541c2a97faa1f6401627f4661175b72b53839aElliott Hugheslong double fminl(long double __x, long double __y) __RENAME_LDBL(fmin, 3, 3) __attribute_const__;
302684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
30350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesdouble fma(double __x, double __y, double __z);
30450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesfloat fmaf(float __x, float __y, float __z);
30550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hugheslong double fmal(long double __x, long double __y, long double __z) __RENAME_LDBL(fma, 3, 21) __VERSIONER_NO_GUARD;
30650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
30750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define isgreater(x, y) __builtin_isgreater((x), (y))
30850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define isgreaterequal(x, y) __builtin_isgreaterequal((x), (y))
30950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define isless(x, y) __builtin_isless((x), (y))
31050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define islessequal(x, y) __builtin_islessequal((x), (y))
31150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define islessgreater(x, y) __builtin_islessgreater((x), (y))
31250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define isunordered(x, y) __builtin_isunordered((x), (y))
31350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
31450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes/*
31550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes * https://code.google.com/p/android/issues/detail?id=271629
31650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes * To be fully compliant with C++, we need to not define these (C doesn't
31750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes * specify them either). Exposing these means that isinf and isnan will have a
31850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes * return type of int in C++ rather than bool like they're supposed to be.
31950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes *
32050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes * GNU libstdc++ 4.9 isn't able to handle a standard compliant C library. Its
32150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes * <cmath> will `#undef isnan` from math.h and only adds the function overloads
32250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes * to the std namespace, making it impossible to use both <cmath> (which gets
32350cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes * included by a lot of other standard headers) and ::isnan.
32450cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes */
32550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesint (isinf)(double __x) __attribute_const__ __INTRODUCED_IN(21);
32650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesint (isnan)(double __x) __attribute_const__;
32750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
32850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes/* POSIX extensions. */
32950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
33050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughesextern int signgam;
331684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes
332684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble j0(double __x);
333684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble j1(double __x);
334684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble jn(int __n, double __x);
335684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble y0(double __x);
336684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble y1(double __x);
337684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble yn(int __n, double __x);
338c1929e44524c7c9fa2cc4fe33a5fedfdca2445a5Elliott Hughes
3393ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_E		2.7182818284590452354	/* e */
3403ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_LOG2E		1.4426950408889634074	/* log 2e */
3413ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_LOG10E	0.43429448190325182765	/* log 10e */
3423ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_LN2		0.69314718055994530942	/* log e2 */
3433ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_LN10		2.30258509299404568402	/* log e10 */
3443ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_PI		3.14159265358979323846	/* pi */
3453ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_PI_2		1.57079632679489661923	/* pi/2 */
3463ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_PI_4		0.78539816339744830962	/* pi/4 */
3473ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_1_PI		0.31830988618379067154	/* 1/pi */
3483ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_2_PI		0.63661977236758134308	/* 2/pi */
3493ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_2_SQRTPI	1.12837916709551257390	/* 2/sqrt(pi) */
3503ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_SQRT2		1.41421356237309504880	/* sqrt(2) */
3513ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_SQRT1_2	0.70710678118654752440	/* 1/sqrt(2) */
3529c8d711aa5ee3108a8e1e8959be9d0355ca0fa6aElliott Hughes
3533ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define MAXFLOAT	((float)3.40282346638528860e+38)
3549c8d711aa5ee3108a8e1e8959be9d0355ca0fa6aElliott Hughes
35550cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes/* BSD extensions. */
35650cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
35750cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#if defined(__USE_BSD)
35850cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#define HUGE MAXFLOAT
35950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes#endif
36050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
36150cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes/* Extensions in both BSD and GNU. */
36250cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
3639c8d711aa5ee3108a8e1e8959be9d0355ca0fa6aElliott Hughes#if defined(__USE_BSD) || defined(__USE_GNU)
364684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble gamma(double __x);
365684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble scalb(double __x, double __exponent);
366684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble drem(double __x, double __y);
367684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesint finite(double __x) __attribute_const__;
368684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesint isnanf(float __x) __attribute_const__;
369684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble gamma_r(double __x, int* __sign);
370684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble lgamma_r(double __x, int* __sign);
371684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesdouble significand(double __x);
372684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hugheslong double lgammal_r(long double __x, int* __sign) __INTRODUCED_IN(23);
373684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hugheslong double significandl(long double __x) __INTRODUCED_IN(21);
374684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat dremf(float __x, float __y);
375684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesint finitef(float __x) __attribute_const__;
376684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat gammaf(float __x);
377684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat j0f(float __x);
378684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat j1f(float __x);
379684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat jnf(int __n, float __x);
380684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat scalbf(float __x, float __exponent);
381684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat y0f(float __x);
382684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat y1f(float __x);
383684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat ynf(int __n, float __x);
384684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat gammaf_r(float __x, int* __sign);
385684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat lgammaf_r(float __x, int* __sign);
386684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesfloat significandf(float __x);
387755318548d787c7ca36901be064c69efba41c6cfElliott Hughes#endif
388755318548d787c7ca36901be064c69efba41c6cfElliott Hughes
38950cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes/* GNU extensions. */
39050cda38f1ddfb0216e986f60cdc877fb9c55ebbaElliott Hughes
3915f5cc45cf0e027f6ca503dc229a4890fc7164b66Elliott Hughes#if defined(__USE_GNU)
3923ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_El            2.718281828459045235360287471352662498L /* e */
3933ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_LOG2El        1.442695040888963407359924681001892137L /* log 2e */
3943ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_LOG10El       0.434294481903251827651128918916605082L /* log 10e */
3953ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_LN2l          0.693147180559945309417232121458176568L /* log e2 */
3963ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_LN10l         2.302585092994045684017991454684364208L /* log e10 */
3973ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_PIl           3.141592653589793238462643383279502884L /* pi */
3983ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_PI_2l         1.570796326794896619231321691639751442L /* pi/2 */
3993ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_PI_4l         0.785398163397448309615660845819875721L /* pi/4 */
4003ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_1_PIl         0.318309886183790671537767526745028724L /* 1/pi */
4013ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_2_PIl         0.636619772367581343075535053490057448L /* 2/pi */
4023ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_2_SQRTPIl     1.128379167095512573896158903121545172L /* 2/sqrt(pi) */
4033ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_SQRT2l        1.414213562373095048801688724209698079L /* sqrt(2) */
4043ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#define M_SQRT1_2l      0.707106781186547524400844362104849039L /* 1/sqrt(2) */
405684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesvoid sincos(double __x, double* __sin, double* __cos);
406684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesvoid sincosf(float __x, float* __sin, float* __cos);
407684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughesvoid sincosl(long double __x, long double* __sin, long double* __cos);
4083ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#endif
409b4f2f28054bf89b1367a99f67a9e9b569e4fda06Elliott Hughes
4101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
4111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
412684c31a2676772ad1fa2005941dcb6f6493b7dfcElliott Hughes#endif
413