Print this page
10882 math headers should stop supporting K&R C


  49 using std::ldexp;
  50 using std::log10;
  51 using std::log;
  52 using std::modf;
  53 using std::pow;
  54 using std::sin;
  55 using std::sinh;
  56 using std::sqrt;
  57 using std::tan;
  58 using std::tanh;
  59 #endif
  60 
  61 #ifdef __cplusplus
  62 extern "C" {
  63 #endif
  64 
  65 #if defined(__cplusplus)
  66 #define exception       __math_exception
  67 #endif
  68 
  69 #ifndef __P
  70 #ifdef __STDC__
  71 #define __P(p)  p
  72 #else
  73 #define __P(p)  ()
  74 #endif
  75 #endif  /* !defined(__P) */
  76 
  77 #if defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) || \
  78         !defined(_STRICT_STDC) && !defined(_POSIX_C_SOURCE)
  79 /*
  80  * SVID & X/Open
  81  */
  82 #define M_E             2.7182818284590452354
  83 #define M_LOG2E         1.4426950408889634074
  84 #define M_LOG10E        0.43429448190325182765
  85 #define M_LN2           0.69314718055994530942
  86 #define M_LN10          2.30258509299404568402
  87 #define M_PI            3.14159265358979323846
  88 #define M_PI_2          1.57079632679489661923
  89 #define M_PI_4          0.78539816339744830962
  90 #define M_1_PI          0.31830988618379067154
  91 #define M_2_PI          0.63661977236758134308
  92 #define M_2_SQRTPI      1.12837916709551257390
  93 #define M_SQRT2         1.41421356237309504880
  94 #define M_SQRT1_2       0.70710678118654752440
  95 
  96 extern int signgam;


 130 #define OVERFLOW        3
 131 #define UNDERFLOW       4
 132 #define TLOSS           5
 133 #define PLOSS           6
 134 
 135 #define _POLY1(x, c)    ((c)[0] * (x) + (c)[1])
 136 #define _POLY2(x, c)    (_POLY1((x), (c)) * (x) + (c)[2])
 137 #define _POLY3(x, c)    (_POLY2((x), (c)) * (x) + (c)[3])
 138 #define _POLY4(x, c)    (_POLY3((x), (c)) * (x) + (c)[4])
 139 #define _POLY5(x, c)    (_POLY4((x), (c)) * (x) + (c)[5])
 140 #define _POLY6(x, c)    (_POLY5((x), (c)) * (x) + (c)[6])
 141 #define _POLY7(x, c)    (_POLY6((x), (c)) * (x) + (c)[7])
 142 #define _POLY8(x, c)    (_POLY7((x), (c)) * (x) + (c)[8])
 143 #define _POLY9(x, c)    (_POLY8((x), (c)) * (x) + (c)[9])
 144 #endif  /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */
 145 
 146 /*
 147  * SVID & X/Open
 148  */
 149 /* BEGIN adopted by C99 */
 150 extern double erf __P((double));
 151 extern double erfc __P((double));
 152 extern double hypot __P((double, double));
 153 extern double lgamma __P((double));
 154 
 155 #if defined(__MATHERR_ERRNO_DONTCARE)
 156 #pragma does_not_read_global_data(erf, erfc, hypot)
 157 #pragma does_not_write_global_data(erf, erfc, hypot)
 158 #pragma no_side_effect(erf, erfc, hypot)
 159 #endif
 160 
 161 #if !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && !defined(__C99FEATURES__)
 162 extern int isnan __P((double));
 163 
 164 #pragma does_not_read_global_data(isnan)
 165 #pragma does_not_write_global_data(isnan)
 166 #pragma no_side_effect(isnan)
 167 #endif
 168 /* END adopted by C99 */
 169 
 170 #if defined(__EXTENSIONS__) || _XOPEN_SOURCE - 0 < 600
 171 extern double gamma __P((double));              /* deprecated; use lgamma */
 172 #endif
 173 extern double j0 __P((double));
 174 extern double j1 __P((double));
 175 extern double jn __P((int, double));
 176 extern double y0 __P((double));
 177 extern double y1 __P((double));
 178 extern double yn __P((int, double));
 179 
 180 #if defined(__MATHERR_ERRNO_DONTCARE)
 181 #pragma does_not_read_global_data(j0, j1, jn, y0, y1, yn)
 182 #pragma does_not_write_global_data(j0, j1, jn, y0, y1, yn)
 183 #pragma no_side_effect(j0, j1, jn, y0, y1, yn)
 184 #endif
 185 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || \
 186         _XOPEN_SOURCE - 0 >= 500 || \
 187         defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 == 1
 188 /*
 189  * SVID & XPG 4.2/5
 190  */
 191 extern double scalb __P((double, double));
 192 
 193 #if defined(__MATHERR_ERRNO_DONTCARE)
 194 #pragma does_not_read_global_data(scalb)
 195 #pragma does_not_write_global_data(scalb)
 196 #pragma no_side_effect(scalb)
 197 #endif
 198 
 199 /* BEGIN adopted by C99 */
 200 extern double acosh __P((double));
 201 extern double asinh __P((double));
 202 extern double atanh __P((double));
 203 extern double cbrt __P((double));
 204 extern double logb __P((double));
 205 extern double nextafter __P((double, double));
 206 extern double remainder __P((double, double));
 207 
 208 /*
 209  * XPG 4.2/5
 210  */
 211 extern double expm1 __P((double));
 212 extern int ilogb __P((double));
 213 extern double log1p __P((double));
 214 extern double rint __P((double));
 215 
 216 #if defined(__MATHERR_ERRNO_DONTCARE)
 217 #pragma does_not_read_global_data(acosh, asinh, atanh, cbrt)
 218 #pragma does_not_read_global_data(logb, nextafter, remainder)
 219 #pragma does_not_read_global_data(expm1, ilogb, log1p, rint)
 220 #pragma does_not_write_global_data(acosh, asinh, atanh, cbrt)
 221 #pragma does_not_write_global_data(logb, nextafter, remainder)
 222 #pragma does_not_write_global_data(expm1, ilogb, log1p, rint)
 223 #pragma no_side_effect(acosh, asinh, atanh, cbrt)
 224 #pragma no_side_effect(logb, nextafter, remainder)
 225 #pragma no_side_effect(expm1, ilogb, log1p, rint)
 226 #endif
 227 /* END adopted by C99 */
 228 #endif  /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || ... */
 229 
 230 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE)
 231 /*
 232  * SVID
 233  */
 234 extern int matherr __P((struct exception *));
 235 
 236 /*
 237  * IEEE Test Vector
 238  */
 239 extern double significand __P((double));
 240 
 241 #if defined(__MATHERR_ERRNO_DONTCARE)
 242 #pragma does_not_read_global_data(significand)
 243 #pragma does_not_write_global_data(significand)
 244 #pragma no_side_effect(significand)
 245 #endif
 246 
 247 extern int signgamf;                            /* deprecated; use signgam */
 248 extern int signgaml;                            /* deprecated; use signgam */
 249 
 250 extern int isnanf __P((float));
 251 extern int isnanl __P((long double));
 252 extern float gammaf __P((float));               /* deprecated; use lgammaf */
 253 extern float gammaf_r __P((float, int *));      /* deprecated; use lgammaf_r */
 254 extern float j0f __P((float));
 255 extern float j1f __P((float));
 256 extern float jnf __P((int, float));
 257 extern float lgammaf_r __P((float, int *));
 258 extern float scalbf __P((float, float));
 259 extern float significandf __P((float));
 260 extern float y0f __P((float));
 261 extern float y1f __P((float));
 262 extern float ynf __P((int, float));
 263 extern long double gammal __P((long double));   /* deprecated; use lgammal */
 264 extern long double gammal_r __P((long double, int *));  /* deprecated */
 265 extern long double j0l __P((long double));
 266 extern long double j1l __P((long double));
 267 extern long double jnl __P((int, long double));
 268 extern long double lgammal_r __P((long double, int *));
 269 extern long double scalbl __P((long double, long double));
 270 extern long double significandl __P((long double));
 271 extern long double y0l __P((long double));
 272 extern long double y1l __P((long double));
 273 extern long double ynl __P((int, long double));
 274 
 275 #if defined(__MATHERR_ERRNO_DONTCARE)
 276 #pragma does_not_read_global_data(isnanf, isnanl)
 277 #pragma does_not_write_global_data(isnanf, isnanl)
 278 #pragma no_side_effect(isnanf, isnanl)
 279 #pragma does_not_read_global_data(gammaf_r, j0f, j1f, jnf, lgammaf_r, scalbf)
 280 #pragma does_not_read_global_data(significandf, y0f, y1f, ynf)
 281 #pragma does_not_write_global_data(j0f, j1f, jnf, scalbf)
 282 #pragma does_not_write_global_data(significandf, y0f, y1f, ynf)
 283 #pragma no_side_effect(j0f, j1f, jnf, scalbf)
 284 #pragma no_side_effect(significandf, y0f, y1f, ynf)
 285 #pragma does_not_read_global_data(gammal_r, j0l, j1l, jnl, lgammal_r, scalbl)
 286 #pragma does_not_read_global_data(significandl, y0l, y1l, ynl)
 287 #pragma does_not_write_global_data(j0l, j1l, jnl, scalbl)
 288 #pragma does_not_write_global_data(significandl, y0l, y1l, ynl)
 289 #pragma no_side_effect(j0l, j1l, jnl, scalbl)
 290 #pragma no_side_effect(significandl, y0l, y1l, ynl)
 291 #endif
 292 
 293 /*
 294  * for sin+cos->sincos transformation
 295  */
 296 extern void sincos __P((double, double *, double *));
 297 extern void sincosf __P((float, float *, float *));
 298 extern void sincosl __P((long double, long double *, long double *));
 299 
 300 #if defined(__MATHERR_ERRNO_DONTCARE)
 301 #pragma does_not_read_global_data(sincos, sincosf, sincosl)
 302 #endif
 303 
 304 /* BEGIN adopted by C99 */
 305 /*
 306  * Functions callable from C, intended to support IEEE arithmetic.
 307  */
 308 extern double copysign __P((double, double));
 309 extern double scalbn __P((double, int));
 310 
 311 #if defined(__MATHERR_ERRNO_DONTCARE)
 312 #pragma does_not_read_global_data(copysign, scalbn)
 313 #pragma does_not_write_global_data(copysign, scalbn)
 314 #pragma no_side_effect(copysign, scalbn)
 315 #endif
 316 /* END adopted by C99 */
 317 
 318 /*
 319  * Reentrant version of gamma & lgamma; passes signgam back by reference
 320  * as the second argument; user must allocate space for signgam.
 321  */
 322 extern double gamma_r __P((double, int *));     /* deprecated; use lgamma_r */
 323 extern double lgamma_r __P((double, int *));
 324 
 325 #if defined(__MATHERR_ERRNO_DONTCARE)
 326 #pragma does_not_read_global_data(gamma_r, lgamma_r)
 327 #endif
 328 
 329 /* BEGIN adopted by C99 */
 330 extern float modff __P((float, float *));
 331 
 332 #if defined(__MATHERR_ERRNO_DONTCARE)
 333 #pragma does_not_read_global_data(modff)
 334 #endif
 335 /* END adopted by C99 */
 336 
 337 #if defined(__EXTENSIONS__) || !defined(__cplusplus)
 338 #include <floatingpoint.h>
 339 #endif
 340 #endif  /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */
 341 #endif  /* defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) || ... */
 342 
 343 #if defined(__cplusplus) && defined(__GNUC__)
 344 #undef  exception
 345 #endif
 346 
 347 #ifdef __cplusplus
 348 }
 349 #endif
 350 


  49 using std::ldexp;
  50 using std::log10;
  51 using std::log;
  52 using std::modf;
  53 using std::pow;
  54 using std::sin;
  55 using std::sinh;
  56 using std::sqrt;
  57 using std::tan;
  58 using std::tanh;
  59 #endif
  60 
  61 #ifdef __cplusplus
  62 extern "C" {
  63 #endif
  64 
  65 #if defined(__cplusplus)
  66 #define exception       __math_exception
  67 #endif
  68 








  69 #if defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) || \
  70         !defined(_STRICT_STDC) && !defined(_POSIX_C_SOURCE)
  71 /*
  72  * SVID & X/Open
  73  */
  74 #define M_E             2.7182818284590452354
  75 #define M_LOG2E         1.4426950408889634074
  76 #define M_LOG10E        0.43429448190325182765
  77 #define M_LN2           0.69314718055994530942
  78 #define M_LN10          2.30258509299404568402
  79 #define M_PI            3.14159265358979323846
  80 #define M_PI_2          1.57079632679489661923
  81 #define M_PI_4          0.78539816339744830962
  82 #define M_1_PI          0.31830988618379067154
  83 #define M_2_PI          0.63661977236758134308
  84 #define M_2_SQRTPI      1.12837916709551257390
  85 #define M_SQRT2         1.41421356237309504880
  86 #define M_SQRT1_2       0.70710678118654752440
  87 
  88 extern int signgam;


 122 #define OVERFLOW        3
 123 #define UNDERFLOW       4
 124 #define TLOSS           5
 125 #define PLOSS           6
 126 
 127 #define _POLY1(x, c)    ((c)[0] * (x) + (c)[1])
 128 #define _POLY2(x, c)    (_POLY1((x), (c)) * (x) + (c)[2])
 129 #define _POLY3(x, c)    (_POLY2((x), (c)) * (x) + (c)[3])
 130 #define _POLY4(x, c)    (_POLY3((x), (c)) * (x) + (c)[4])
 131 #define _POLY5(x, c)    (_POLY4((x), (c)) * (x) + (c)[5])
 132 #define _POLY6(x, c)    (_POLY5((x), (c)) * (x) + (c)[6])
 133 #define _POLY7(x, c)    (_POLY6((x), (c)) * (x) + (c)[7])
 134 #define _POLY8(x, c)    (_POLY7((x), (c)) * (x) + (c)[8])
 135 #define _POLY9(x, c)    (_POLY8((x), (c)) * (x) + (c)[9])
 136 #endif  /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */
 137 
 138 /*
 139  * SVID & X/Open
 140  */
 141 /* BEGIN adopted by C99 */
 142 extern double erf(double);
 143 extern double erfc(double);
 144 extern double hypot(double, double);
 145 extern double lgamma(double);
 146 
 147 #if defined(__MATHERR_ERRNO_DONTCARE)
 148 #pragma does_not_read_global_data(erf, erfc, hypot)
 149 #pragma does_not_write_global_data(erf, erfc, hypot)
 150 #pragma no_side_effect(erf, erfc, hypot)
 151 #endif
 152 
 153 #if !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && !defined(__C99FEATURES__)
 154 extern int isnan(double);
 155 
 156 #pragma does_not_read_global_data(isnan)
 157 #pragma does_not_write_global_data(isnan)
 158 #pragma no_side_effect(isnan)
 159 #endif
 160 /* END adopted by C99 */
 161 
 162 #if defined(__EXTENSIONS__) || _XOPEN_SOURCE - 0 < 600
 163 extern double gamma(double);            /* deprecated; use lgamma */
 164 #endif
 165 extern double j0(double);
 166 extern double j1(double);
 167 extern double jn(int, double);
 168 extern double y0(double);
 169 extern double y1(double);
 170 extern double yn(int, double);
 171 
 172 #if defined(__MATHERR_ERRNO_DONTCARE)
 173 #pragma does_not_read_global_data(j0, j1, jn, y0, y1, yn)
 174 #pragma does_not_write_global_data(j0, j1, jn, y0, y1, yn)
 175 #pragma no_side_effect(j0, j1, jn, y0, y1, yn)
 176 #endif
 177 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || \
 178         _XOPEN_SOURCE - 0 >= 500 || \
 179         defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 == 1
 180 /*
 181  * SVID & XPG 4.2/5
 182  */
 183 extern double scalb(double, double);
 184 
 185 #if defined(__MATHERR_ERRNO_DONTCARE)
 186 #pragma does_not_read_global_data(scalb)
 187 #pragma does_not_write_global_data(scalb)
 188 #pragma no_side_effect(scalb)
 189 #endif
 190 
 191 /* BEGIN adopted by C99 */
 192 extern double acosh(double);
 193 extern double asinh(double);
 194 extern double atanh(double);
 195 extern double cbrt(double);
 196 extern double logb(double);
 197 extern double nextafter(double, double);
 198 extern double remainder(double, double);
 199 
 200 /*
 201  * XPG 4.2/5
 202  */
 203 extern double expm1(double);
 204 extern int ilogb(double);
 205 extern double log1p(double);
 206 extern double rint(double);
 207 
 208 #if defined(__MATHERR_ERRNO_DONTCARE)
 209 #pragma does_not_read_global_data(acosh, asinh, atanh, cbrt)
 210 #pragma does_not_read_global_data(logb, nextafter, remainder)
 211 #pragma does_not_read_global_data(expm1, ilogb, log1p, rint)
 212 #pragma does_not_write_global_data(acosh, asinh, atanh, cbrt)
 213 #pragma does_not_write_global_data(logb, nextafter, remainder)
 214 #pragma does_not_write_global_data(expm1, ilogb, log1p, rint)
 215 #pragma no_side_effect(acosh, asinh, atanh, cbrt)
 216 #pragma no_side_effect(logb, nextafter, remainder)
 217 #pragma no_side_effect(expm1, ilogb, log1p, rint)
 218 #endif
 219 /* END adopted by C99 */
 220 #endif  /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) || ... */
 221 
 222 #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE)
 223 /*
 224  * SVID
 225  */
 226 extern int matherr(struct exception *);
 227 
 228 /*
 229  * IEEE Test Vector
 230  */
 231 extern double significand(double);
 232 
 233 #if defined(__MATHERR_ERRNO_DONTCARE)
 234 #pragma does_not_read_global_data(significand)
 235 #pragma does_not_write_global_data(significand)
 236 #pragma no_side_effect(significand)
 237 #endif
 238 
 239 extern int signgamf;                            /* deprecated; use signgam */
 240 extern int signgaml;                            /* deprecated; use signgam */
 241 
 242 extern int isnanf(float);
 243 extern int isnanl(long double);
 244 extern float gammaf(float);             /* deprecated; use lgammaf */
 245 extern float gammaf_r(float, int *);    /* deprecated; use lgammaf_r */
 246 extern float j0f(float);
 247 extern float j1f(float);
 248 extern float jnf(int, float);
 249 extern float lgammaf_r(float, int *);
 250 extern float scalbf(float, float);
 251 extern float significandf(float);
 252 extern float y0f(float);
 253 extern float y1f(float);
 254 extern float ynf(int, float);
 255 extern long double gammal(long double); /* deprecated; use lgammal */
 256 extern long double gammal_r(long double, int *);        /* deprecated */
 257 extern long double j0l(long double);
 258 extern long double j1l(long double);
 259 extern long double jnl(int, long double);
 260 extern long double lgammal_r(long double, int *);
 261 extern long double scalbl(long double, long double);
 262 extern long double significandl(long double);
 263 extern long double y0l(long double);
 264 extern long double y1l(long double);
 265 extern long double ynl(int, long double);
 266 
 267 #if defined(__MATHERR_ERRNO_DONTCARE)
 268 #pragma does_not_read_global_data(isnanf, isnanl)
 269 #pragma does_not_write_global_data(isnanf, isnanl)
 270 #pragma no_side_effect(isnanf, isnanl)
 271 #pragma does_not_read_global_data(gammaf_r, j0f, j1f, jnf, lgammaf_r, scalbf)
 272 #pragma does_not_read_global_data(significandf, y0f, y1f, ynf)
 273 #pragma does_not_write_global_data(j0f, j1f, jnf, scalbf)
 274 #pragma does_not_write_global_data(significandf, y0f, y1f, ynf)
 275 #pragma no_side_effect(j0f, j1f, jnf, scalbf)
 276 #pragma no_side_effect(significandf, y0f, y1f, ynf)
 277 #pragma does_not_read_global_data(gammal_r, j0l, j1l, jnl, lgammal_r, scalbl)
 278 #pragma does_not_read_global_data(significandl, y0l, y1l, ynl)
 279 #pragma does_not_write_global_data(j0l, j1l, jnl, scalbl)
 280 #pragma does_not_write_global_data(significandl, y0l, y1l, ynl)
 281 #pragma no_side_effect(j0l, j1l, jnl, scalbl)
 282 #pragma no_side_effect(significandl, y0l, y1l, ynl)
 283 #endif
 284 
 285 /*
 286  * for sin+cos->sincos transformation
 287  */
 288 extern void sincos(double, double *, double *);
 289 extern void sincosf(float, float *, float *);
 290 extern void sincosl(long double, long double *, long double *);
 291 
 292 #if defined(__MATHERR_ERRNO_DONTCARE)
 293 #pragma does_not_read_global_data(sincos, sincosf, sincosl)
 294 #endif
 295 
 296 /* BEGIN adopted by C99 */
 297 /*
 298  * Functions callable from C, intended to support IEEE arithmetic.
 299  */
 300 extern double copysign(double, double);
 301 extern double scalbn(double, int);
 302 
 303 #if defined(__MATHERR_ERRNO_DONTCARE)
 304 #pragma does_not_read_global_data(copysign, scalbn)
 305 #pragma does_not_write_global_data(copysign, scalbn)
 306 #pragma no_side_effect(copysign, scalbn)
 307 #endif
 308 /* END adopted by C99 */
 309 
 310 /*
 311  * Reentrant version of gamma & lgamma; passes signgam back by reference
 312  * as the second argument; user must allocate space for signgam.
 313  */
 314 extern double gamma_r(double, int *);   /* deprecated; use lgamma_r */
 315 extern double lgamma_r(double, int *);
 316 
 317 #if defined(__MATHERR_ERRNO_DONTCARE)
 318 #pragma does_not_read_global_data(gamma_r, lgamma_r)
 319 #endif
 320 
 321 /* BEGIN adopted by C99 */
 322 extern float modff(float, float *);
 323 
 324 #if defined(__MATHERR_ERRNO_DONTCARE)
 325 #pragma does_not_read_global_data(modff)
 326 #endif
 327 /* END adopted by C99 */
 328 
 329 #if defined(__EXTENSIONS__) || !defined(__cplusplus)
 330 #include <floatingpoint.h>
 331 #endif
 332 #endif  /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */
 333 #endif  /* defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) || ... */
 334 
 335 #if defined(__cplusplus) && defined(__GNUC__)
 336 #undef  exception
 337 #endif
 338 
 339 #ifdef __cplusplus
 340 }
 341 #endif
 342