Mercurial > flash_v2
annotate packages/language/c/libm/current/include/math.h @ 1777:c16341b1bac6 default tip
* Added execute permissions to files missed in conversion from CVS
| author | alexs |
|---|---|
| date | Mon, 12 Oct 2009 02:26:09 +0100 |
| parents | d2c90368aeef |
| children |
| rev | line source |
|---|---|
| 0 | 1 #ifndef CYGONCE_LIBM_MATH_H |
| 2 #define CYGONCE_LIBM_MATH_H | |
| 3 //=========================================================================== | |
| 4 // | |
| 5 // math.h | |
| 6 // | |
| 7 // Standard mathematical functions conforming to ANSI and other standards | |
| 8 // | |
| 9 //=========================================================================== | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
10 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
11 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
12 // This file is part of eCos, the Embedded Configurable Operating System. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
14 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
15 // eCos is free software; you can redistribute it and/or modify it under |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
16 // the terms of the GNU General Public License as published by the Free |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
17 // Software Foundation; either version 2 or (at your option) any later version. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
18 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
19 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
20 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
21 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
22 // for more details. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
23 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
24 // You should have received a copy of the GNU General Public License along |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
25 // with eCos; if not, write to the Free Software Foundation, Inc., |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
26 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
27 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
28 // As a special exception, if other files instantiate templates or use macros |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
29 // or inline functions from this file, or you compile this file and link it |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
30 // with other works to produce a work based on this file, this file does not |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
31 // by itself cause the resulting work to be covered by the GNU General Public |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
32 // License. However the source code for this file must still be made available |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
33 // in accordance with section (3) of the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
34 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
35 // This exception does not invalidate any other reasons why a work based on |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
36 // this file might be covered by the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
37 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
38 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
39 // at http://sources.redhat.com/ecos/ecos-license/ |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
40 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
41 //####ECOSGPLCOPYRIGHTEND#### |
| 0 | 42 //=========================================================================== |
| 43 //#####DESCRIPTIONBEGIN#### | |
| 44 // | |
| 2 | 45 // Author(s): jlarmour |
| 46 // Contributors: jlarmour | |
| 0 | 47 // Date: 1998-02-13 |
| 48 // Purpose: | |
| 49 // Description: Standard mathematical functions. These can be | |
| 50 // configured to conform to ANSI section 7.5. There are also | |
| 51 // a number of extensions conforming to IEEE-754 and behaviours | |
| 52 // compatible with other standards | |
| 53 // Usage: #include <math.h> | |
| 54 // | |
| 55 //####DESCRIPTIONEND#### | |
| 56 // | |
| 57 //=========================================================================== | |
| 58 | |
| 59 // CONFIGURATION | |
| 60 | |
| 61 #include <pkgconf/libm.h> // Configuration header | |
| 62 | |
| 63 // Include the Math library? | |
| 64 #ifdef CYGPKG_LIBM | |
| 65 | |
| 66 // INCLUDES | |
| 67 | |
| 68 #include <cyg/infra/cyg_type.h> // Common type definitions and support | |
| 69 #include <float.h> // Properties of FP representation on this | |
| 70 // platform | |
| 71 #include <sys/ieeefp.h> // Cyg_libm_ieee_double_shape_type | |
| 72 | |
| 73 // CONSTANT DEFINITIONS | |
| 74 | |
| 75 | |
| 76 // HUGE_VAL is a positive double (not necessarily representable as a float) | |
| 77 // representing infinity as specified in ANSI 7.5. cyg_libm_infinity is | |
| 78 // defined further down | |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
79 #define HUGE_VAL (cyg_libm_infinity.value) |
| 0 | 80 |
| 81 | |
| 82 #ifndef CYGSYM_LIBM_NO_XOPEN_SVID_NAMESPACE_POLLUTION | |
| 83 // HUGE is defined in System V Interface Definition 3 (SVID3) as the largest | |
| 84 // finite single precision number | |
| 85 #define HUGE FLT_MAX // from float.h | |
| 86 | |
| 87 | |
| 88 // Values used in the type field of struct exception below | |
| 89 | |
| 90 #define DOMAIN 1 | |
| 91 #define SING 2 | |
| 92 #define OVERFLOW 3 | |
| 93 #define UNDERFLOW 4 | |
| 94 #define TLOSS 5 | |
| 95 #define PLOSS 6 | |
| 96 | |
| 97 | |
| 98 // TYPE DEFINITIONS | |
| 99 | |
| 100 // Things required to support matherr() ( see comments in <pkgconf/libm.h>) | |
| 101 | |
| 102 struct exception { | |
| 103 int type; // One of DOMAIN, SING, OVERFLOW, UNDERFLOW, TLOSS, PLOSS | |
| 104 char *name; // Name of the function generating the exception | |
| 105 double arg1; // First argument to the function | |
| 106 double arg2; // Second argument to the function | |
| 107 double retval; // Value to be returned - can be altered by matherr() | |
| 108 }; | |
| 109 | |
| 110 #endif // ifndef CYGSYM_LIBM_NO_XOPEN_SVID_NAMESPACE_POLLUTION | |
| 111 | |
| 112 | |
| 113 // GLOBALS | |
| 114 | |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
119
diff
changeset
|
115 externC const Cyg_libm_ieee_double_shape_type cyg_libm_infinity; |
| 0 | 116 |
| 117 //=========================================================================== | |
| 118 // FUNCTION PROTOTYPES | |
| 119 | |
| 120 // Functions not part of a standard | |
| 121 | |
| 122 // This retrieves a pointer to the current compatibility mode of the Math | |
| 123 // library. See <pkgconf/libm.h> for the definition of Cyg_libm_compat_t | |
| 124 | |
| 125 #ifdef CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE | |
| 126 | |
| 127 externC Cyg_libm_compat_t | |
| 128 cyg_libm_get_compat_mode( void ); | |
| 129 | |
| 130 externC Cyg_libm_compat_t | |
| 131 cyg_libm_set_compat_mode( Cyg_libm_compat_t ); | |
| 132 | |
| 133 #else | |
| 134 | |
| 135 externC Cyg_libm_compat_t cygvar_libm_compat_mode; | |
| 136 | |
| 137 // Defined as static inline as it is unlikely that anyone wants to take the | |
| 138 // address of these functions. | |
| 139 // | |
| 140 // This returns the current compatibility mode | |
| 141 | |
| 142 static inline Cyg_libm_compat_t | |
| 143 cyg_libm_get_compat_mode( void ) | |
| 144 { | |
| 145 return cygvar_libm_compat_mode; | |
| 146 } | |
| 147 | |
| 148 // This sets the compatibility mode, and returns the previous mode | |
| 149 static inline Cyg_libm_compat_t | |
| 150 cyg_libm_set_compat_mode( Cyg_libm_compat_t math_compat_mode) | |
| 151 { | |
| 152 Cyg_libm_compat_t oldmode; | |
| 153 | |
| 154 oldmode = cygvar_libm_compat_mode; | |
| 155 cygvar_libm_compat_mode = math_compat_mode; | |
| 156 return oldmode; | |
| 157 } | |
| 158 | |
| 159 #endif // ifdef CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE | |
| 160 | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
161 #ifdef CYGSEM_LIBM_THREAD_SAFE_GAMMA_FUNCTIONS |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
162 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
163 // FIXME: these need to be documented and signgam mentioned as non-ISO |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
164 // This returns the address of the signgam variable used by the gamma*() and |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
165 // lgamma*() functions |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
166 externC int * |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
167 cyg_libm_get_signgam_p( void ); |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
168 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
169 #define signgam (*cyg_libm_get_signgam_p()) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
170 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
171 #else |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
172 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
173 externC int signgam; |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
174 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
175 #endif // ifdef CYGSEM_LIBM_THREAD_SAFE_GAMMA_FUNCTIONS |
| 0 | 176 |
| 177 //=========================================================================== | |
| 178 // Standard ANSI functions. Angles are always in radians | |
| 179 | |
| 180 // Trigonometric functions - ANSI 7.5.2 | |
| 181 | |
| 182 externC double | |
| 183 acos( double ); // arc cosine i.e. inverse cos | |
| 184 | |
| 185 externC double | |
| 186 asin( double ); // arc sine i.e. inverse sin | |
| 187 | |
| 188 externC double | |
| 189 atan( double ); // arc tan i.e. inverse tan | |
| 190 | |
| 191 externC double | |
| 192 atan2( double, double ); // arc tan of (first arg/second arg) using signs | |
| 193 // of args to determine quadrant | |
| 194 | |
| 195 externC double | |
| 196 cos( double ); // cosine | |
| 197 | |
| 198 externC double | |
| 199 sin( double ); // sine | |
| 200 | |
| 201 externC double | |
| 202 tan( double ); // tangent | |
| 203 | |
| 204 // Hyperbolic functions - ANSI 7.5.3 | |
| 205 | |
| 206 externC double | |
| 207 cosh( double ); // hyperbolic cosine | |
| 208 | |
| 209 externC double | |
| 210 sinh( double ); // hyperbolic sine | |
| 211 | |
| 212 externC double | |
| 213 tanh( double ); // hyperbolic tangent | |
| 214 | |
| 215 // Exponential and Logarithmic Functions - ANSI 7.5.4 | |
| 216 | |
| 217 externC double | |
| 218 exp( double ); // exponent | |
| 219 | |
| 220 externC double | |
| 221 frexp( double, int * ); // break number into normalized fraction (returned) | |
| 222 // and integral power of 2 (second arg) | |
| 223 | |
| 224 externC double | |
| 225 ldexp( double, int ); // multiples number by integral power of 2 | |
| 226 | |
| 227 externC double | |
| 228 log( double ); // natural logarithm | |
| 229 | |
| 230 externC double | |
| 231 log10( double ); // base ten logarithm | |
| 232 | |
| 233 externC double | |
| 234 modf( double, double * ); // break number into integral and fractional | |
| 235 // parts, each of which has same sign as arg. | |
| 236 // It returns signed fractional part, and | |
| 237 // puts integral part in second arg | |
| 238 | |
| 239 // Power Functions - ANSI 7.5.5 | |
| 240 | |
| 241 externC double | |
| 242 pow( double, double ); // (1st arg) to the power of (2nd arg) | |
| 243 | |
| 244 externC double | |
| 245 sqrt( double ); // square root | |
| 246 | |
| 247 // Nearest integer, absolute value and remainder functions - ANSI 7.5.6 | |
| 248 | |
| 249 externC double | |
| 250 ceil( double ); // smallest integer >= arg | |
| 251 | |
| 252 externC double | |
| 253 fabs( double ); // absolute value | |
| 254 | |
| 255 externC double | |
| 256 floor( double ); // largest integer <= arg | |
| 257 | |
| 258 externC double | |
| 259 fmod( double, double ); // remainder of (1st arg)/(2nd arg) | |
| 260 | |
| 261 //=========================================================================== | |
| 262 // Other standard functions | |
| 263 | |
| 264 #ifndef CYGSYM_LIBM_NO_XOPEN_SVID_NAMESPACE_POLLUTION | |
| 265 externC int | |
| 266 matherr( struct exception * ); // User-overridable error handling - see | |
| 267 #endif // <pkgconf/libm.h> for a discussion | |
| 268 | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
269 // FIXME: from here needs to be documented and mentioned as non-ISO |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
270 // Arc Hyperbolic trigonometric functions |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
271 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
272 externC double |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
273 acosh( double ); // Arc hyperbolic cos i.e. inverse cosh |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
274 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
275 externC double |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
276 asinh( double ); // Arc hyperbolic sin i.e. inverse sinh |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
277 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
278 externC double |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
279 atanh( double ); // Arc hyperbolic tan i.e. inverse tanh |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
280 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
281 // Error functions |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
282 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
283 externC double // Error function, such that |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
284 erf( double ); // erf(x) = 2/sqrt(pi) * integral from |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
285 // 0 to x of e**(-t**2) dt |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
286 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
287 externC double // Complementary error function - simply |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
288 erfc( double ); // 1.0 - erf(x) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
289 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
290 // Gamma functions |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
291 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
292 externC double // Logarithm of the absolute value of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
293 lgamma( double ); // gamma function of the argument. The |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
294 // integer signgam is used to store the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
295 // sign of the gamma function of the arg |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
296 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
297 externC double |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
298 lgamma_r( double, int * ); // Re-entrant version of the above, where |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
299 // the user passes the location of signgam |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
300 // as the second argument |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
301 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
302 externC double // Identical to lgamma()! |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
303 gamma( double ); // The reasons for this are historical, |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
304 // and may be changed in future standards |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
305 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
306 // To get the real gamma function, you should |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
307 // use: l=lgamma(x); g=signgam*exp(l); |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
308 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
309 // Do not just do signgam*exp(lgamma(x)) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
310 // as lgamma() modifies signgam |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
311 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
312 externC double |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
313 gamma_r( double, int * ); // Identical to lgamma_r(). See above. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
314 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
315 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
316 // Bessel functions |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
317 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
318 externC double // Zero-th order Bessel function of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
319 j0( double ); // first kind at the ordinate of the argument |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
320 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
321 externC double // First-order Bessel function of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
322 j1( double ); // first kind at the ordinate of the argument |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
323 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
324 externC double // Bessel function of the first kind of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
325 jn( int, double ); // order of the first argument at the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
326 // ordinate of the second argument |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
327 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
328 externC double // Zero-th order Bessel function of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
329 y0( double ); // second kind at the ordinate of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
330 // argument |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
331 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
332 externC double // First-order Bessel function of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
333 y1( double ); // second kind at the ordinate of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
334 // argument |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
335 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
336 externC double // Bessel function of the second kind of the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
337 yn( int, double ); // order of the first argument at the |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
338 // ordinate of the second argument |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
339 |
| 0 | 340 // scalb*() |
| 341 | |
| 342 externC double // scalbn(x,n) returns x*(2**n) | |
| 343 scalbn( double, int ); | |
| 344 | |
| 345 #ifdef CYGFUN_LIBM_SVID3_scalb | |
| 346 | |
| 347 externC double | |
| 348 scalb( double, double ); // as above except n is a floating point arg | |
| 349 | |
| 350 #else | |
| 351 externC double | |
| 352 scalb( double, int ); // as scalbn() | |
| 353 | |
| 354 #endif // ifdef CYGFUN_LIBM_SVID3_scalb | |
| 355 | |
| 356 // And the rest | |
| 357 | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
358 externC double |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
359 cbrt( double ); // Cube Root |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
360 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
361 externC double // hypotenuse function, defined such that: |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
362 hypot( double, double ); // hypot(x,y)==sqrt(x**2 + y**2) |
| 0 | 363 |
| 364 externC int // whether the argument is NaN | |
| 365 isnan( double ); | |
| 366 | |
| 367 externC int | |
| 368 finite( double ); // whether the argument is finite | |
| 369 | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
370 externC double // logb returns the binary exponent of its |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
371 logb( double ); // argument as an integral value |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
372 // This is not recommended - use ilogb |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
373 // instead |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
374 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
375 externC int // As for logb, but has the more correct |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
376 ilogb( double ); // return value type of int |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
377 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
378 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
379 externC double // nextafter(x,y) returns the next |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
380 nextafter( double, double ); // representable floating point number |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
381 // adjacent to x in the direction of y |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
382 // i.e. the next greater FP if y>x, the next |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
383 // less FP if y<x, or just x if y==x |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
384 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
385 externC double // remainder(x,y) returns the remainder |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
386 remainder( double, double ); // when x is divided by y |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
387 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
388 externC double // IEEE Test Vector |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
389 significand( double ); // significand(x) computes: |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
390 // scalb(x, (double) -ilogb(x)) |
| 0 | 391 |
| 392 //=========================================================================== | |
| 393 // Non-standard functions | |
| 394 | |
| 395 externC double // copysign(x,y) returns a number with | |
| 396 copysign ( double, double ); // the absolute value of x and the sign of y | |
| 397 | |
| 398 externC double // rounds to an integer according to the | |
| 399 rint( double ); // current rounding mode | |
| 400 | |
| 401 | |
| 402 // BSD functions | |
| 403 | |
| 404 externC double // expm1(x) returns the equivalent of | |
| 405 expm1( double ); // (exp(x) - 1) but more accurately when | |
| 406 // x tends to zero | |
| 407 | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
408 externC double // log1p(x) returns the equivalent of |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
409 log1p( double ); // log(1+x) but more accurately when |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
126
diff
changeset
|
410 // x tends to zero |
| 0 | 411 |
| 412 #endif // ifdef CYGPKG_LIBM | |
| 413 | |
| 414 #endif // CYGONCE_LIBM_MATH_H multiple inclusion protection | |
| 415 | |
| 416 // EOF math.h |
