1951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 2951a39d68df598db08dfced8b4707755864a0492Ying Wang * ==================================================== 3951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 4951a39d68df598db08dfced8b4707755864a0492Ying Wang * 5951a39d68df598db08dfced8b4707755864a0492Ying Wang * Developed at SunPro, a Sun Microsystems, Inc. business. 6951a39d68df598db08dfced8b4707755864a0492Ying Wang * Permission to use, copy, modify, and distribute this 7951a39d68df598db08dfced8b4707755864a0492Ying Wang * software is freely granted, provided that this notice 8951a39d68df598db08dfced8b4707755864a0492Ying Wang * is preserved. 9951a39d68df598db08dfced8b4707755864a0492Ying Wang * ==================================================== 10951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 11951a39d68df598db08dfced8b4707755864a0492Ying Wang 12951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 13951a39d68df598db08dfced8b4707755864a0492Ying Wang * from: @(#)fdlibm.h 5.1 93/09/24 14951a39d68df598db08dfced8b4707755864a0492Ying Wang * $FreeBSD: src/lib/msun/src/math.h,v 1.61 2005/04/16 21:12:47 das Exp $ 15951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 16951a39d68df598db08dfced8b4707755864a0492Ying Wang 17951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _MATH_H_ 18951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _MATH_H_ 19951a39d68df598db08dfced8b4707755864a0492Ying Wang 20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <sys/cdefs.h> 21951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <sys/types.h> 22951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <limits.h> 23951a39d68df598db08dfced8b4707755864a0492Ying Wang 24951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __pure2 25951a39d68df598db08dfced8b4707755864a0492Ying Wang 26951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 27951a39d68df598db08dfced8b4707755864a0492Ying Wang * ANSI/POSIX 28951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 29951a39d68df598db08dfced8b4707755864a0492Ying Wangextern const union __infinity_un { 30951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char __uc[8]; 31951a39d68df598db08dfced8b4707755864a0492Ying Wang double __ud; 32951a39d68df598db08dfced8b4707755864a0492Ying Wang} __infinity; 33951a39d68df598db08dfced8b4707755864a0492Ying Wang 34951a39d68df598db08dfced8b4707755864a0492Ying Wangextern const union __nan_un { 35951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char __uc[sizeof(float)]; 36951a39d68df598db08dfced8b4707755864a0492Ying Wang float __uf; 37951a39d68df598db08dfced8b4707755864a0492Ying Wang} __nan; 38951a39d68df598db08dfced8b4707755864a0492Ying Wang 39951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __GNUC_PREREQ__(3, 3) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800) */ 40951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 1 41951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __MATH_BUILTIN_CONSTANTS 42951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 43951a39d68df598db08dfced8b4707755864a0492Ying Wang 44951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __GNUC_PREREQ__(3, 0) && !defined(__INTEL_COMPILER) */ 45951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 1 46951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __MATH_BUILTIN_RELOPS 47951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 48951a39d68df598db08dfced8b4707755864a0492Ying Wang 49951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #ifdef __MATH_BUILTIN_CONSTANTS */ 50951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 1 51951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HUGE_VAL __builtin_huge_val() 52951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 53951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HUGE_VAL (__infinity.__ud) 54951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 55951a39d68df598db08dfced8b4707755864a0492Ying Wang 56951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __ISO_C_VISIBLE >= 1999 */ 57951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 58951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_ILOGB0 (-__INT_MAX) 59951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_ILOGBNAN __INT_MAX 60951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 61951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_ILOGB0 (-INT_MAX) 62951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_ILOGBNAN INT_MAX 63951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 64951a39d68df598db08dfced8b4707755864a0492Ying Wang 65951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __MATH_BUILTIN_CONSTANTS 66951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HUGE_VALF __builtin_huge_valf() 67951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HUGE_VALL __builtin_huge_vall() 68951a39d68df598db08dfced8b4707755864a0492Ying Wang#define INFINITY __builtin_inf() 69951a39d68df598db08dfced8b4707755864a0492Ying Wang#define NAN __builtin_nan("") 70951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 71951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HUGE_VALF (float)HUGE_VAL 72951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HUGE_VALL (long double)HUGE_VAL 73951a39d68df598db08dfced8b4707755864a0492Ying Wang#define INFINITY HUGE_VALF 74951a39d68df598db08dfced8b4707755864a0492Ying Wang#define NAN (__nan.__uf) 75951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* __MATH_BUILTIN_CONSTANTS */ 76951a39d68df598db08dfced8b4707755864a0492Ying Wang 77951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MATH_ERRNO 1 78951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MATH_ERREXCEPT 2 79951a39d68df598db08dfced8b4707755864a0492Ying Wang#define math_errhandling MATH_ERREXCEPT 80951a39d68df598db08dfced8b4707755864a0492Ying Wang 81951a39d68df598db08dfced8b4707755864a0492Ying Wang/* XXX We need a <machine/math.h>. */ 82951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined(__ia64__) || defined(__sparc64__) 83951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_FAST_FMA 84951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 85951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __ia64__ 86951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_FAST_FMAL 87951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 88951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_FAST_FMAF 89951a39d68df598db08dfced8b4707755864a0492Ying Wang 90951a39d68df598db08dfced8b4707755864a0492Ying Wang/* Symbolic constants to classify floating point numbers. */ 91951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_INFINITE 0x01 92951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_NAN 0x02 93951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_NORMAL 0x04 94951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_SUBNORMAL 0x08 95951a39d68df598db08dfced8b4707755864a0492Ying Wang#define FP_ZERO 0x10 96951a39d68df598db08dfced8b4707755864a0492Ying Wang#define fpclassify(x) \ 97951a39d68df598db08dfced8b4707755864a0492Ying Wang ((sizeof (x) == sizeof (float)) ? __fpclassifyf(x) \ 98951a39d68df598db08dfced8b4707755864a0492Ying Wang : (sizeof (x) == sizeof (double)) ? __fpclassifyd(x) \ 99951a39d68df598db08dfced8b4707755864a0492Ying Wang : __fpclassifyl(x)) 100951a39d68df598db08dfced8b4707755864a0492Ying Wang 101951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isfinite(x) \ 102951a39d68df598db08dfced8b4707755864a0492Ying Wang ((sizeof (x) == sizeof (float)) ? __isfinitef(x) \ 103951a39d68df598db08dfced8b4707755864a0492Ying Wang : (sizeof (x) == sizeof (double)) ? __isfinite(x) \ 104951a39d68df598db08dfced8b4707755864a0492Ying Wang : __isfinitel(x)) 105951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isinf(x) \ 106951a39d68df598db08dfced8b4707755864a0492Ying Wang ((sizeof (x) == sizeof (float)) ? __isinff(x) \ 107951a39d68df598db08dfced8b4707755864a0492Ying Wang : (sizeof (x) == sizeof (double)) ? __isinf(x) \ 108951a39d68df598db08dfced8b4707755864a0492Ying Wang : __isinfl(x)) 109951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isnan(x) \ 110951a39d68df598db08dfced8b4707755864a0492Ying Wang ((sizeof (x) == sizeof (float)) ? isnanf(x) \ 111951a39d68df598db08dfced8b4707755864a0492Ying Wang : (sizeof (x) == sizeof (double)) ? isnan(x) \ 112951a39d68df598db08dfced8b4707755864a0492Ying Wang : __isnanl(x)) 113951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isnormal(x) \ 114951a39d68df598db08dfced8b4707755864a0492Ying Wang ((sizeof (x) == sizeof (float)) ? __isnormalf(x) \ 115951a39d68df598db08dfced8b4707755864a0492Ying Wang : (sizeof (x) == sizeof (double)) ? __isnormal(x) \ 116951a39d68df598db08dfced8b4707755864a0492Ying Wang : __isnormall(x)) 117951a39d68df598db08dfced8b4707755864a0492Ying Wang 118951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __MATH_BUILTIN_RELOPS 119951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isgreater(x, y) __builtin_isgreater((x), (y)) 120951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isgreaterequal(x, y) __builtin_isgreaterequal((x), (y)) 121951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isless(x, y) __builtin_isless((x), (y)) 122951a39d68df598db08dfced8b4707755864a0492Ying Wang#define islessequal(x, y) __builtin_islessequal((x), (y)) 123951a39d68df598db08dfced8b4707755864a0492Ying Wang#define islessgreater(x, y) __builtin_islessgreater((x), (y)) 124951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isunordered(x, y) __builtin_isunordered((x), (y)) 125951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 126951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isgreater(x, y) (!isunordered((x), (y)) && (x) > (y)) 127951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isgreaterequal(x, y) (!isunordered((x), (y)) && (x) >= (y)) 128951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isless(x, y) (!isunordered((x), (y)) && (x) < (y)) 129951a39d68df598db08dfced8b4707755864a0492Ying Wang#define islessequal(x, y) (!isunordered((x), (y)) && (x) <= (y)) 130951a39d68df598db08dfced8b4707755864a0492Ying Wang#define islessgreater(x, y) (!isunordered((x), (y)) && \ 131951a39d68df598db08dfced8b4707755864a0492Ying Wang ((x) > (y) || (y) > (x))) 132951a39d68df598db08dfced8b4707755864a0492Ying Wang#define isunordered(x, y) (isnan(x) || isnan(y)) 133951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* __MATH_BUILTIN_RELOPS */ 134951a39d68df598db08dfced8b4707755864a0492Ying Wang 135951a39d68df598db08dfced8b4707755864a0492Ying Wang#define signbit(x) \ 136951a39d68df598db08dfced8b4707755864a0492Ying Wang ((sizeof (x) == sizeof (float)) ? __signbitf(x) \ 137951a39d68df598db08dfced8b4707755864a0492Ying Wang : (sizeof (x) == sizeof (double)) ? __signbit(x) \ 138951a39d68df598db08dfced8b4707755864a0492Ying Wang : __signbitl(x)) 139951a39d68df598db08dfced8b4707755864a0492Ying Wang 140951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 141951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __double_t double_t; 142951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef __float_t float_t; 143951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 144951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ /* __ISO_C_VISIBLE >= 1999 */ 145951a39d68df598db08dfced8b4707755864a0492Ying Wang 146951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 147951a39d68df598db08dfced8b4707755864a0492Ying Wang * XOPEN/SVID 148951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 149951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __BSD_VISIBLE || __XSI_VISIBLE */ 150951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_E 2.7182818284590452354 /* e */ 151951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_LOG2E 1.4426950408889634074 /* log 2e */ 152951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_LOG10E 0.43429448190325182765 /* log 10e */ 153951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_LN2 0.69314718055994530942 /* log e2 */ 154951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_LN10 2.30258509299404568402 /* log e10 */ 155951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_PI 3.14159265358979323846 /* pi */ 156951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_PI_2 1.57079632679489661923 /* pi/2 */ 157951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_PI_4 0.78539816339744830962 /* pi/4 */ 158951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_1_PI 0.31830988618379067154 /* 1/pi */ 159951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_2_PI 0.63661977236758134308 /* 2/pi */ 160951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ 161951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ 162951a39d68df598db08dfced8b4707755864a0492Ying Wang#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ 163951a39d68df598db08dfced8b4707755864a0492Ying Wang 164951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MAXFLOAT ((float)3.40282346638528860e+38) 165951a39d68df598db08dfced8b4707755864a0492Ying Wangextern int signgam; 166951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ /* __BSD_VISIBLE || __XSI_VISIBLE */ 167951a39d68df598db08dfced8b4707755864a0492Ying Wang 168951a39d68df598db08dfced8b4707755864a0492Ying Wang#if __BSD_VISIBLE 169951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 170951a39d68df598db08dfced8b4707755864a0492Ying Wang/* Old value from 4.4BSD-Lite math.h; this is probably better. */ 171951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HUGE HUGE_VAL 172951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 173951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HUGE MAXFLOAT 174951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 175951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* __BSD_VISIBLE */ 176951a39d68df598db08dfced8b4707755864a0492Ying Wang 177951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 178951a39d68df598db08dfced8b4707755864a0492Ying Wang * Most of these functions depend on the rounding mode and have the side 179951a39d68df598db08dfced8b4707755864a0492Ying Wang * effect of raising floating-point exceptions, so they are not declared 180951a39d68df598db08dfced8b4707755864a0492Ying Wang * as __pure2. In C99, FENV_ACCESS affects the purity of these functions. 181951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 182951a39d68df598db08dfced8b4707755864a0492Ying Wang__BEGIN_DECLS 183951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 184951a39d68df598db08dfced8b4707755864a0492Ying Wang * ANSI/POSIX 185951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 186951a39d68df598db08dfced8b4707755864a0492Ying Wangint __fpclassifyd(double) __pure2; 187951a39d68df598db08dfced8b4707755864a0492Ying Wangint __fpclassifyf(float) __pure2; 188951a39d68df598db08dfced8b4707755864a0492Ying Wangint __fpclassifyl(long double) __pure2; 189951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isfinitef(float) __pure2; 190951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isfinite(double) __pure2; 191951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isfinitel(long double) __pure2; 192951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isinff(float) __pure2; 193951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isinf(double) __pure2; 194951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isinfl(long double) __pure2; 195951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isnanl(long double) __pure2; 196951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isnormalf(float) __pure2; 197951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isnormal(double) __pure2; 198951a39d68df598db08dfced8b4707755864a0492Ying Wangint __isnormall(long double) __pure2; 199951a39d68df598db08dfced8b4707755864a0492Ying Wangint __signbit(double) __pure2; 200951a39d68df598db08dfced8b4707755864a0492Ying Wangint __signbitf(float) __pure2; 201951a39d68df598db08dfced8b4707755864a0492Ying Wangint __signbitl(long double) __pure2; 202951a39d68df598db08dfced8b4707755864a0492Ying Wang 203951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble acos(double); 204951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble asin(double); 205951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble atan(double); 206951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble atan2(double, double); 207951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble cos(double); 208951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble sin(double); 209951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble tan(double); 210951a39d68df598db08dfced8b4707755864a0492Ying Wang 211951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble cosh(double); 212951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble sinh(double); 213951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble tanh(double); 214951a39d68df598db08dfced8b4707755864a0492Ying Wang 215951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble exp(double); 216951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble frexp(double, int *); /* fundamentally !__pure2 */ 217951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble ldexp(double, int); 218951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble log(double); 219951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble log10(double); 220951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble modf(double, double *); /* fundamentally !__pure2 */ 221951a39d68df598db08dfced8b4707755864a0492Ying Wang 222951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble pow(double, double); 223951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble sqrt(double); 224951a39d68df598db08dfced8b4707755864a0492Ying Wang 225951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble ceil(double); 226951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble fabs(double) __pure2; 227951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble floor(double); 228951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble fmod(double, double); 229951a39d68df598db08dfced8b4707755864a0492Ying Wang 230951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 231951a39d68df598db08dfced8b4707755864a0492Ying Wang * These functions are not in C90. 232951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 233951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */ 234951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble acosh(double); 235951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble asinh(double); 236951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble atanh(double); 237951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble cbrt(double); 238951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble erf(double); 239951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble erfc(double); 240951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble exp2(double); 241951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble expm1(double); 242951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble fma(double, double, double); 243951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble hypot(double, double); 244951a39d68df598db08dfced8b4707755864a0492Ying Wangint ilogb(double) __pure2; 245951a39d68df598db08dfced8b4707755864a0492Ying Wang/* int (isinf)(double) __pure2; */ 246951a39d68df598db08dfced8b4707755864a0492Ying Wangint (isnan)(double) __pure2; 247951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble lgamma(double); 248951a39d68df598db08dfced8b4707755864a0492Ying Wanglong long llrint(double); 249951a39d68df598db08dfced8b4707755864a0492Ying Wanglong long llround(double); 250951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble log1p(double); 251951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble logb(double); 252951a39d68df598db08dfced8b4707755864a0492Ying Wanglong lrint(double); 253951a39d68df598db08dfced8b4707755864a0492Ying Wanglong lround(double); 254951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble nextafter(double, double); 255951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble remainder(double, double); 256951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble remquo(double, double, int *); 257951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble rint(double); 258951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */ 259951a39d68df598db08dfced8b4707755864a0492Ying Wang 260951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __BSD_VISIBLE || __XSI_VISIBLE */ 261951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble j0(double); 262951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble j1(double); 263951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble jn(int, double); 264951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble scalb(double, double); 265951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble y0(double); 266951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble y1(double); 267951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble yn(int, double); 268951a39d68df598db08dfced8b4707755864a0492Ying Wang 269951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __XSI_VISIBLE <= 500 || __BSD_VISIBLE */ 270951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble gamma(double); 271951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ 272951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ /* __BSD_VISIBLE || __XSI_VISIBLE */ 273951a39d68df598db08dfced8b4707755864a0492Ying Wang 274951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 */ 275951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble copysign(double, double) __pure2; 276951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble fdim(double, double); 277951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble fmax(double, double) __pure2; 278951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble fmin(double, double) __pure2; 279951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble nearbyint(double); 280951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble round(double); 281951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble scalbln(double, long); 282951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble scalbn(double, int); 283951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble tgamma(double); 284951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble trunc(double); 285951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ 286951a39d68df598db08dfced8b4707755864a0492Ying Wang 287951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 288951a39d68df598db08dfced8b4707755864a0492Ying Wang * BSD math library entry points 289951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 290951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __BSD_VISIBLE */ 291951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble drem(double, double); 292951a39d68df598db08dfced8b4707755864a0492Ying Wangint finite(double) __pure2; 293951a39d68df598db08dfced8b4707755864a0492Ying Wangint isnanf(float) __pure2; 294951a39d68df598db08dfced8b4707755864a0492Ying Wang 295951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 296951a39d68df598db08dfced8b4707755864a0492Ying Wang * Reentrant version of gamma & lgamma; passes signgam back by reference 297951a39d68df598db08dfced8b4707755864a0492Ying Wang * as the second argument; user must allocate space for signgam. 298951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 299951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble gamma_r(double, int *); 300951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble lgamma_r(double, int *); 301951a39d68df598db08dfced8b4707755864a0492Ying Wang 302951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 303951a39d68df598db08dfced8b4707755864a0492Ying Wang * IEEE Test Vector 304951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 305951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble significand(double); 306951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ /* __BSD_VISIBLE */ 307951a39d68df598db08dfced8b4707755864a0492Ying Wang 308951a39d68df598db08dfced8b4707755864a0492Ying Wang/* float versions of ANSI/POSIX functions */ 309951a39d68df598db08dfced8b4707755864a0492Ying Wang/*#if __ISO_C_VISIBLE >= 1999 */ 310951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat acosf(float); 311951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat asinf(float); 312951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat atanf(float); 313951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat atan2f(float, float); 314951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat cosf(float); 315951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat sinf(float); 316951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat tanf(float); 317951a39d68df598db08dfced8b4707755864a0492Ying Wang 318951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat coshf(float); 319951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat sinhf(float); 320951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat tanhf(float); 321951a39d68df598db08dfced8b4707755864a0492Ying Wang 322951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat exp2f(float); 323951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat expf(float); 324951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat expm1f(float); 325951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat frexpf(float, int *); /* fundamentally !__pure2 */ 326951a39d68df598db08dfced8b4707755864a0492Ying Wangint ilogbf(float) __pure2; 327951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat ldexpf(float, int); 328951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat log10f(float); 329951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat log1pf(float); 330951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat logf(float); 331951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat modff(float, float *); /* fundamentally !__pure2 */ 332951a39d68df598db08dfced8b4707755864a0492Ying Wang 333951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat powf(float, float); 334951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat sqrtf(float); 335951a39d68df598db08dfced8b4707755864a0492Ying Wang 336951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat ceilf(float); 337951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat fabsf(float) __pure2; 338951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat floorf(float); 339951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat fmodf(float, float); 340951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat roundf(float); 341951a39d68df598db08dfced8b4707755864a0492Ying Wang 342951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat erff(float); 343951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat erfcf(float); 344951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat hypotf(float, float); 345951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat lgammaf(float); 346951a39d68df598db08dfced8b4707755864a0492Ying Wang 347951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat acoshf(float); 348951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat asinhf(float); 349951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat atanhf(float); 350951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat cbrtf(float); 351951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat logbf(float); 352951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat copysignf(float, float) __pure2; 353951a39d68df598db08dfced8b4707755864a0492Ying Wanglong long llrintf(float); 354951a39d68df598db08dfced8b4707755864a0492Ying Wanglong long llroundf(float); 355951a39d68df598db08dfced8b4707755864a0492Ying Wanglong lrintf(float); 356951a39d68df598db08dfced8b4707755864a0492Ying Wanglong lroundf(float); 357951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat nearbyintf(float); 358951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat nextafterf(float, float); 359951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat remainderf(float, float); 360951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat remquof(float, float, int *); 361951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat rintf(float); 362951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat scalblnf(float, long); 363951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat scalbnf(float, int); 364951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat truncf(float); 365951a39d68df598db08dfced8b4707755864a0492Ying Wang 366951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat fdimf(float, float); 367951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat fmaf(float, float, float); 368951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat fmaxf(float, float) __pure2; 369951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat fminf(float, float) __pure2; 370951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ 371951a39d68df598db08dfced8b4707755864a0492Ying Wang 372951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 373951a39d68df598db08dfced8b4707755864a0492Ying Wang * float versions of BSD math library entry points 374951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 375951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __BSD_VISIBLE */ 376951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat dremf(float, float); 377951a39d68df598db08dfced8b4707755864a0492Ying Wangint finitef(float) __pure2; 378951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat gammaf(float); 379951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat j0f(float); 380951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat j1f(float); 381951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat jnf(int, float); 382951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat scalbf(float, float); 383951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat y0f(float); 384951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat y1f(float); 385951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat ynf(int, float); 386951a39d68df598db08dfced8b4707755864a0492Ying Wang 387951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 388951a39d68df598db08dfced8b4707755864a0492Ying Wang * Float versions of reentrant version of gamma & lgamma; passes 389951a39d68df598db08dfced8b4707755864a0492Ying Wang * signgam back by reference as the second argument; user must 390951a39d68df598db08dfced8b4707755864a0492Ying Wang * allocate space for signgam. 391951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 392951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat gammaf_r(float, int *); 393951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat lgammaf_r(float, int *); 394951a39d68df598db08dfced8b4707755864a0492Ying Wang 395951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 396951a39d68df598db08dfced8b4707755864a0492Ying Wang * float version of IEEE Test Vector 397951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 398951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat significandf(float); 399951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ /* __BSD_VISIBLE */ 400951a39d68df598db08dfced8b4707755864a0492Ying Wang 401951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 402951a39d68df598db08dfced8b4707755864a0492Ying Wang * long double versions of ISO/POSIX math functions 403951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 404951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #if __ISO_C_VISIBLE >= 1999 */ 405951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 406951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double acoshl(long double); 407951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double acosl(long double); 408951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double asinhl(long double); 409951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double asinl(long double); 410951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double atan2l(long double, long double); 411951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double atanhl(long double); 412951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double atanl(long double); 413951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double cbrtl(long double); 414951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 415951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double ceill(long double); 416951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double copysignl(long double, long double) __pure2; 417951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 418951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double coshl(long double); 419951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double cosl(long double); 420951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double erfcl(long double); 421951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double erfl(long double); 422951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double exp2l(long double); 423951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double expl(long double); 424951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double expm1l(long double); 425951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 426951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double fabsl(long double) __pure2; 427951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double fdiml(long double, long double); 428951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double floorl(long double); 429951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double fmal(long double, long double, long double); 430951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double fmaxl(long double, long double) __pure2; 431951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double fminl(long double, long double) __pure2; 432951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 433951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double fmodl(long double, long double); 434951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 435951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double frexpl(long double value, int *); /* fundamentally !__pure2 */ 436951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 437951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double hypotl(long double, long double); 438951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 439951a39d68df598db08dfced8b4707755864a0492Ying Wangint ilogbl(long double) __pure2; 440951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double ldexpl(long double, int); 441951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 442951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double lgammal(long double); 443951a39d68df598db08dfced8b4707755864a0492Ying Wanglong long llrintl(long double); 444951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 445951a39d68df598db08dfced8b4707755864a0492Ying Wanglong long llroundl(long double); 446951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 447951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double log10l(long double); 448951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double log1pl(long double); 449951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double log2l(long double); 450951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double logbl(long double); 451951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double logl(long double); 452951a39d68df598db08dfced8b4707755864a0492Ying Wanglong lrintl(long double); 453951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 454951a39d68df598db08dfced8b4707755864a0492Ying Wanglong lroundl(long double); 455951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 456951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double modfl(long double, long double *); /* fundamentally !__pure2 */ 457951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double nanl(const char *) __pure2; 458951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double nearbyintl(long double); 459951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 460951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double nextafterl(long double, long double); 461951a39d68df598db08dfced8b4707755864a0492Ying Wangdouble nexttoward(double, long double); 462951a39d68df598db08dfced8b4707755864a0492Ying Wangfloat nexttowardf(float, long double); 463951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double nexttowardl(long double, long double); 464951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 465951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double powl(long double, long double); 466951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double remainderl(long double, long double); 467951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double remquol(long double, long double, int *); 468951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double rintl(long double); 469951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 470951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double roundl(long double); 471951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double scalblnl(long double, long); 472951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double scalbnl(long double, int); 473951a39d68df598db08dfced8b4707755864a0492Ying Wang#if 0 474951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double sinhl(long double); 475951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double sinl(long double); 476951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double sqrtl(long double); 477951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double tanhl(long double); 478951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double tanl(long double); 479951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double tgammal(long double); 480951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 481951a39d68df598db08dfced8b4707755864a0492Ying Wanglong double truncl(long double); 482951a39d68df598db08dfced8b4707755864a0492Ying Wang 483951a39d68df598db08dfced8b4707755864a0492Ying Wang/* BIONIC: GLibc compatibility - required by the ARM toolchain */ 484951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef _GNU_SOURCE 485951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid sincos(double x, double *sin, double *cos); 486951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid sincosf(float x, float *sin, float *cos); 487951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid sincosl(long double x, long double *sin, long double *cos); 488951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 489951a39d68df598db08dfced8b4707755864a0492Ying Wang 490951a39d68df598db08dfced8b4707755864a0492Ying Wang/* #endif */ /* __ISO_C_VISIBLE >= 1999 */ 491951a39d68df598db08dfced8b4707755864a0492Ying Wang__END_DECLS 492951a39d68df598db08dfced8b4707755864a0492Ying Wang 493951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* !_MATH_H_ */ 494