1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright (c) 1988 by Sun Microsystems, Inc. 24*7c478bd9Sstevel@tonic-gate */ 25*7c478bd9Sstevel@tonic-gate 26*7c478bd9Sstevel@tonic-gate /* Copyright (c) 1984 AT&T */ 27*7c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 28*7c478bd9Sstevel@tonic-gate 29*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 30*7c478bd9Sstevel@tonic-gate 31*7c478bd9Sstevel@tonic-gate 32*7c478bd9Sstevel@tonic-gate /* 33*7c478bd9Sstevel@tonic-gate * Math library definitions for all the public functions implemented in libm.a. 34*7c478bd9Sstevel@tonic-gate */ 35*7c478bd9Sstevel@tonic-gate 36*7c478bd9Sstevel@tonic-gate #ifndef __math_h 37*7c478bd9Sstevel@tonic-gate #define __math_h 38*7c478bd9Sstevel@tonic-gate 39*7c478bd9Sstevel@tonic-gate /* 40*7c478bd9Sstevel@tonic-gate * Posix (actually ansi C) section 41*7c478bd9Sstevel@tonic-gate */ 42*7c478bd9Sstevel@tonic-gate #define HUGE_VAL (__infinity()) /* Produces IEEE Infinity. */ 43*7c478bd9Sstevel@tonic-gate 44*7c478bd9Sstevel@tonic-gate 45*7c478bd9Sstevel@tonic-gate extern double __infinity(); 46*7c478bd9Sstevel@tonic-gate extern double acos(/* double x */); 47*7c478bd9Sstevel@tonic-gate extern double asin(/* double x */); 48*7c478bd9Sstevel@tonic-gate extern double atan(/* double x */); 49*7c478bd9Sstevel@tonic-gate extern double atan2(/* double y, double x */); 50*7c478bd9Sstevel@tonic-gate extern double ceil(/* double x */); 51*7c478bd9Sstevel@tonic-gate extern double cos(/* double x */); 52*7c478bd9Sstevel@tonic-gate extern double cosh(/* double x */); 53*7c478bd9Sstevel@tonic-gate extern double exp(/* double x */); 54*7c478bd9Sstevel@tonic-gate extern double fabs(/* double x */); 55*7c478bd9Sstevel@tonic-gate extern double floor(/* double x */); 56*7c478bd9Sstevel@tonic-gate extern double fmod(/* double x, double y */); 57*7c478bd9Sstevel@tonic-gate extern double frexp(/* double value, int *exp */); 58*7c478bd9Sstevel@tonic-gate extern double ldexp(/* double value, int exp */); 59*7c478bd9Sstevel@tonic-gate extern double log(/* double x */); 60*7c478bd9Sstevel@tonic-gate extern double log10(/* double x */); 61*7c478bd9Sstevel@tonic-gate extern double modf(/* double value, double *iptr */); 62*7c478bd9Sstevel@tonic-gate extern double pow(/* double x, double y */); 63*7c478bd9Sstevel@tonic-gate extern double sin(/* double x */); 64*7c478bd9Sstevel@tonic-gate extern double sinh(/* double x */); 65*7c478bd9Sstevel@tonic-gate extern double sqrt(/* double x */); 66*7c478bd9Sstevel@tonic-gate extern double tan(/* double x */); 67*7c478bd9Sstevel@tonic-gate extern double tanh(/* double x */); 68*7c478bd9Sstevel@tonic-gate 69*7c478bd9Sstevel@tonic-gate #ifndef _POSIX_SOURCE /* the rest of the file is !POSIX */ 70*7c478bd9Sstevel@tonic-gate #include <floatingpoint.h> /* Contains definitions for types and 71*7c478bd9Sstevel@tonic-gate * functions implemented in libc.a. 72*7c478bd9Sstevel@tonic-gate */ 73*7c478bd9Sstevel@tonic-gate extern double acosh(); 74*7c478bd9Sstevel@tonic-gate extern double asinh(); 75*7c478bd9Sstevel@tonic-gate extern double atanh(); 76*7c478bd9Sstevel@tonic-gate extern double cbrt(); 77*7c478bd9Sstevel@tonic-gate extern double copysign(); 78*7c478bd9Sstevel@tonic-gate extern double erf(); 79*7c478bd9Sstevel@tonic-gate extern double erfc(); 80*7c478bd9Sstevel@tonic-gate extern double expm1(); 81*7c478bd9Sstevel@tonic-gate extern int finite(); 82*7c478bd9Sstevel@tonic-gate extern double hypot(); 83*7c478bd9Sstevel@tonic-gate extern double j0(); 84*7c478bd9Sstevel@tonic-gate extern double j1(); 85*7c478bd9Sstevel@tonic-gate extern double jn(); 86*7c478bd9Sstevel@tonic-gate extern double lgamma(); 87*7c478bd9Sstevel@tonic-gate extern double log1p(); 88*7c478bd9Sstevel@tonic-gate extern double rint(); 89*7c478bd9Sstevel@tonic-gate extern double y0(); 90*7c478bd9Sstevel@tonic-gate extern double y1(); 91*7c478bd9Sstevel@tonic-gate extern double yn(); 92*7c478bd9Sstevel@tonic-gate 93*7c478bd9Sstevel@tonic-gate /* 94*7c478bd9Sstevel@tonic-gate * Sun definitions. 95*7c478bd9Sstevel@tonic-gate */ 96*7c478bd9Sstevel@tonic-gate 97*7c478bd9Sstevel@tonic-gate /* 98*7c478bd9Sstevel@tonic-gate * Implemented precisions for trigonometric argument reduction. 99*7c478bd9Sstevel@tonic-gate */ 100*7c478bd9Sstevel@tonic-gate enum fp_pi_type { 101*7c478bd9Sstevel@tonic-gate fp_pi_infinite = 0, /* Infinite-precision approximation to pi. */ 102*7c478bd9Sstevel@tonic-gate fp_pi_66 = 1, /* 66-bit approximation to pi. */ 103*7c478bd9Sstevel@tonic-gate fp_pi_53 = 2 /* 53-bit approximation to pi. */ 104*7c478bd9Sstevel@tonic-gate }; 105*7c478bd9Sstevel@tonic-gate 106*7c478bd9Sstevel@tonic-gate /* 107*7c478bd9Sstevel@tonic-gate * Pi precision to use for trigonometric argument reduction. 108*7c478bd9Sstevel@tonic-gate */ 109*7c478bd9Sstevel@tonic-gate extern enum fp_pi_type fp_pi; 110*7c478bd9Sstevel@tonic-gate 111*7c478bd9Sstevel@tonic-gate /* 112*7c478bd9Sstevel@tonic-gate * Functions callable from C, intended to support IEEE arithmetic. 113*7c478bd9Sstevel@tonic-gate */ 114*7c478bd9Sstevel@tonic-gate extern enum fp_class_type fp_class(); 115*7c478bd9Sstevel@tonic-gate extern int ieee_flags(); 116*7c478bd9Sstevel@tonic-gate extern int ieee_handler(); 117*7c478bd9Sstevel@tonic-gate extern void ieee_retrospective(); 118*7c478bd9Sstevel@tonic-gate extern int ilogb(); 119*7c478bd9Sstevel@tonic-gate extern double infinity(); 120*7c478bd9Sstevel@tonic-gate extern int irint(); 121*7c478bd9Sstevel@tonic-gate extern int isinf(); 122*7c478bd9Sstevel@tonic-gate extern int isnan(); 123*7c478bd9Sstevel@tonic-gate extern int isnormal(); 124*7c478bd9Sstevel@tonic-gate extern int issubnormal(); 125*7c478bd9Sstevel@tonic-gate extern int iszero(); 126*7c478bd9Sstevel@tonic-gate extern double logb(); 127*7c478bd9Sstevel@tonic-gate extern double max_normal(); 128*7c478bd9Sstevel@tonic-gate extern double max_subnormal(); 129*7c478bd9Sstevel@tonic-gate extern double min_normal(); 130*7c478bd9Sstevel@tonic-gate extern double min_subnormal(); 131*7c478bd9Sstevel@tonic-gate extern double nextafter(); 132*7c478bd9Sstevel@tonic-gate extern void nonstandard_arithmetic(); 133*7c478bd9Sstevel@tonic-gate extern double quiet_nan(); 134*7c478bd9Sstevel@tonic-gate extern double remainder(); 135*7c478bd9Sstevel@tonic-gate extern double scalb(); 136*7c478bd9Sstevel@tonic-gate extern double scalbn(); 137*7c478bd9Sstevel@tonic-gate extern double signaling_nan(); 138*7c478bd9Sstevel@tonic-gate extern int signbit(); 139*7c478bd9Sstevel@tonic-gate extern double significand(); 140*7c478bd9Sstevel@tonic-gate extern void standard_arithmetic(); 141*7c478bd9Sstevel@tonic-gate 142*7c478bd9Sstevel@tonic-gate /* 143*7c478bd9Sstevel@tonic-gate * Other functions for C programmers. 144*7c478bd9Sstevel@tonic-gate */ 145*7c478bd9Sstevel@tonic-gate extern double acospi(); 146*7c478bd9Sstevel@tonic-gate extern double aint(); 147*7c478bd9Sstevel@tonic-gate extern double anint(); 148*7c478bd9Sstevel@tonic-gate extern double annuity(); 149*7c478bd9Sstevel@tonic-gate extern double asinpi(); 150*7c478bd9Sstevel@tonic-gate extern double atan2pi(); 151*7c478bd9Sstevel@tonic-gate extern double atanpi(); 152*7c478bd9Sstevel@tonic-gate extern double compound(); 153*7c478bd9Sstevel@tonic-gate extern double cospi(); 154*7c478bd9Sstevel@tonic-gate extern double exp10(); 155*7c478bd9Sstevel@tonic-gate extern double exp2(); 156*7c478bd9Sstevel@tonic-gate extern double log2(); 157*7c478bd9Sstevel@tonic-gate extern int nint(); 158*7c478bd9Sstevel@tonic-gate extern void sincos(); 159*7c478bd9Sstevel@tonic-gate extern void sincospi(); 160*7c478bd9Sstevel@tonic-gate extern double sinpi(); 161*7c478bd9Sstevel@tonic-gate extern double tanpi(); 162*7c478bd9Sstevel@tonic-gate extern int matherr(); 163*7c478bd9Sstevel@tonic-gate 164*7c478bd9Sstevel@tonic-gate 165*7c478bd9Sstevel@tonic-gate /* 166*7c478bd9Sstevel@tonic-gate * Single-precision functions callable from Fortran, Pascal, Modula-2, etc, 167*7c478bd9Sstevel@tonic-gate * take float* arguments instead of double and 168*7c478bd9Sstevel@tonic-gate * return FLOATFUNCTIONTYPE results instead of double. 169*7c478bd9Sstevel@tonic-gate * RETURNFLOAT is used to return a float function value without conversion 170*7c478bd9Sstevel@tonic-gate * to double. 171*7c478bd9Sstevel@tonic-gate * ASSIGNFLOAT is used to get the float value out of a FLOATFUNCTIONTYPE 172*7c478bd9Sstevel@tonic-gate * result. 173*7c478bd9Sstevel@tonic-gate * We don't want you to have to think about -fsingle2. 174*7c478bd9Sstevel@tonic-gate * 175*7c478bd9Sstevel@tonic-gate * Some internal library functions pass float parameters as 32-bit values, 176*7c478bd9Sstevel@tonic-gate * disguised as FLOATPARAMETER. FLOATPARAMETERVALUE(x) extracts the 177*7c478bd9Sstevel@tonic-gate * float value from the FLOATPARAMETER. 178*7c478bd9Sstevel@tonic-gate */ 179*7c478bd9Sstevel@tonic-gate 180*7c478bd9Sstevel@tonic-gate /* mc68000 returns float results in d0, same as int */ 181*7c478bd9Sstevel@tonic-gate 182*7c478bd9Sstevel@tonic-gate #ifdef mc68000 183*7c478bd9Sstevel@tonic-gate #define FLOATFUNCTIONTYPE int 184*7c478bd9Sstevel@tonic-gate #define RETURNFLOAT(x) return (*(int *)(&(x))) 185*7c478bd9Sstevel@tonic-gate #define ASSIGNFLOAT(x,y) *(int *)(&x) = y 186*7c478bd9Sstevel@tonic-gate #endif 187*7c478bd9Sstevel@tonic-gate 188*7c478bd9Sstevel@tonic-gate /* sparc returns float results in %f0, same as top half of double */ 189*7c478bd9Sstevel@tonic-gate 190*7c478bd9Sstevel@tonic-gate #ifdef sparc 191*7c478bd9Sstevel@tonic-gate #define FLOATFUNCTIONTYPE double 192*7c478bd9Sstevel@tonic-gate #define RETURNFLOAT(x) { union {double _d; float _f } _kluge; _kluge._f = (x); return _kluge._d; } 193*7c478bd9Sstevel@tonic-gate #define ASSIGNFLOAT(x,y) { union {double _d; float _f } _kluge; _kluge._d = (y); x = _kluge._f; } 194*7c478bd9Sstevel@tonic-gate #endif 195*7c478bd9Sstevel@tonic-gate 196*7c478bd9Sstevel@tonic-gate /* i386 returns float results on stack as extendeds, same as double */ 197*7c478bd9Sstevel@tonic-gate 198*7c478bd9Sstevel@tonic-gate #ifdef i386 199*7c478bd9Sstevel@tonic-gate #define FLOATFUNCTIONTYPE float 200*7c478bd9Sstevel@tonic-gate #define RETURNFLOAT(x) return (x) 201*7c478bd9Sstevel@tonic-gate #define ASSIGNFLOAT(x,y) x = y 202*7c478bd9Sstevel@tonic-gate #endif 203*7c478bd9Sstevel@tonic-gate 204*7c478bd9Sstevel@tonic-gate /* So far everybody passes float parameters as 32 bits on stack, same as int. */ 205*7c478bd9Sstevel@tonic-gate 206*7c478bd9Sstevel@tonic-gate #define FLOATPARAMETER int 207*7c478bd9Sstevel@tonic-gate #define FLOATPARAMETERVALUE(x) (*(float *)(&(x))) 208*7c478bd9Sstevel@tonic-gate 209*7c478bd9Sstevel@tonic-gate extern int ir_finite_(); 210*7c478bd9Sstevel@tonic-gate extern enum fp_class_type ir_fp_class_(); 211*7c478bd9Sstevel@tonic-gate extern int ir_ilogb_(); 212*7c478bd9Sstevel@tonic-gate extern int ir_irint_(); 213*7c478bd9Sstevel@tonic-gate extern int ir_isinf_(); 214*7c478bd9Sstevel@tonic-gate extern int ir_isnan_(); 215*7c478bd9Sstevel@tonic-gate extern int ir_isnormal_(); 216*7c478bd9Sstevel@tonic-gate extern int ir_issubnormal_(); 217*7c478bd9Sstevel@tonic-gate extern int ir_iszero_(); 218*7c478bd9Sstevel@tonic-gate extern int ir_nint_(); 219*7c478bd9Sstevel@tonic-gate extern int ir_signbit_(); 220*7c478bd9Sstevel@tonic-gate extern void r_sincos_(); 221*7c478bd9Sstevel@tonic-gate extern void r_sincospi_(); 222*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_acos_(); 223*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_acosh_(); 224*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_acospi_(); 225*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_aint_(); 226*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_anint_(); 227*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_annuity_(); 228*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_asin_(); 229*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_asinh_(); 230*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_asinpi_(); 231*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_atan2_(); 232*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_atan2pi_(); 233*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_atan_(); 234*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_atanh_(); 235*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_atanpi_(); 236*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_cbrt_(); 237*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_ceil_(); 238*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_compound_(); 239*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_copysign_(); 240*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_cos_(); 241*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_cosh_(); 242*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_cospi_(); 243*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_erf_(); 244*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_erfc_(); 245*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_exp10_(); 246*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_exp2_(); 247*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_exp_(); 248*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_expm1_(); 249*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_fabs_(); 250*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_floor_(); 251*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_fmod_(); 252*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_hypot_(); 253*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_infinity_(); 254*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_j0_(); 255*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_j1_(); 256*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_jn_(); 257*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_lgamma_(); 258*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_log10_(); 259*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_log1p_(); 260*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_log2_(); 261*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_log_(); 262*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_logb_(); 263*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_max_normal_(); 264*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_max_subnormal_(); 265*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_min_normal_(); 266*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_min_subnormal_(); 267*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_nextafter_(); 268*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_pow_(); 269*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_quiet_nan_(); 270*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_remainder_(); 271*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_rint_(); 272*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_scalb_(); 273*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_scalbn_(); 274*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_signaling_nan_(); 275*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_significand_(); 276*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_sin_(); 277*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_sinh_(); 278*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_sinpi_(); 279*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_sqrt_(); 280*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_tan_(); 281*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_tanh_(); 282*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_tanpi_(); 283*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_y0_(); 284*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_y1_(); 285*7c478bd9Sstevel@tonic-gate extern FLOATFUNCTIONTYPE r_yn_(); 286*7c478bd9Sstevel@tonic-gate 287*7c478bd9Sstevel@tonic-gate /* Constants, variables, and functions from System V */ 288*7c478bd9Sstevel@tonic-gate 289*7c478bd9Sstevel@tonic-gate #define _ABS(x) ((x) < 0 ? -(x) : (x)) 290*7c478bd9Sstevel@tonic-gate 291*7c478bd9Sstevel@tonic-gate #define HUGE (infinity()) /* For historical compatibility. */ 292*7c478bd9Sstevel@tonic-gate 293*7c478bd9Sstevel@tonic-gate #define DOMAIN 1 294*7c478bd9Sstevel@tonic-gate #define SING 2 295*7c478bd9Sstevel@tonic-gate #define OVERFLOW 3 296*7c478bd9Sstevel@tonic-gate #define UNDERFLOW 4 297*7c478bd9Sstevel@tonic-gate #define TLOSS 5 298*7c478bd9Sstevel@tonic-gate #define PLOSS 6 299*7c478bd9Sstevel@tonic-gate 300*7c478bd9Sstevel@tonic-gate struct exception { 301*7c478bd9Sstevel@tonic-gate int type; 302*7c478bd9Sstevel@tonic-gate char *name; 303*7c478bd9Sstevel@tonic-gate double arg1; 304*7c478bd9Sstevel@tonic-gate double arg2; 305*7c478bd9Sstevel@tonic-gate double retval; 306*7c478bd9Sstevel@tonic-gate }; 307*7c478bd9Sstevel@tonic-gate 308*7c478bd9Sstevel@tonic-gate /* 309*7c478bd9Sstevel@tonic-gate * First three have to be defined exactly as in values.h including spacing! 310*7c478bd9Sstevel@tonic-gate */ 311*7c478bd9Sstevel@tonic-gate #define M_LN2 0.69314718055994530942 312*7c478bd9Sstevel@tonic-gate #define M_PI 3.14159265358979323846 313*7c478bd9Sstevel@tonic-gate #define M_SQRT2 1.41421356237309504880 314*7c478bd9Sstevel@tonic-gate 315*7c478bd9Sstevel@tonic-gate #define M_E 2.7182818284590452354 316*7c478bd9Sstevel@tonic-gate #define M_LOG2E 1.4426950408889634074 317*7c478bd9Sstevel@tonic-gate #define M_LOG10E 0.43429448190325182765 318*7c478bd9Sstevel@tonic-gate #define M_LN10 2.30258509299404568402 319*7c478bd9Sstevel@tonic-gate #define M_PI_2 1.57079632679489661923 320*7c478bd9Sstevel@tonic-gate #define M_PI_4 0.78539816339744830962 321*7c478bd9Sstevel@tonic-gate #define M_1_PI 0.31830988618379067154 322*7c478bd9Sstevel@tonic-gate #define M_2_PI 0.63661977236758134308 323*7c478bd9Sstevel@tonic-gate #define M_2_SQRTPI 1.12837916709551257390 324*7c478bd9Sstevel@tonic-gate #define M_SQRT1_2 0.70710678118654752440 325*7c478bd9Sstevel@tonic-gate #define _REDUCE(TYPE, X, XN, C1, C2) { \ 326*7c478bd9Sstevel@tonic-gate double x1 = (double)(TYPE)X, x2 = X - x1; \ 327*7c478bd9Sstevel@tonic-gate X = x1 - (XN) * (C1); X += x2; X -= (XN) * (C2); } 328*7c478bd9Sstevel@tonic-gate #define _POLY1(x, c) ((c)[0] * (x) + (c)[1]) 329*7c478bd9Sstevel@tonic-gate #define _POLY2(x, c) (_POLY1((x), (c)) * (x) + (c)[2]) 330*7c478bd9Sstevel@tonic-gate #define _POLY3(x, c) (_POLY2((x), (c)) * (x) + (c)[3]) 331*7c478bd9Sstevel@tonic-gate #define _POLY4(x, c) (_POLY3((x), (c)) * (x) + (c)[4]) 332*7c478bd9Sstevel@tonic-gate #define _POLY5(x, c) (_POLY4((x), (c)) * (x) + (c)[5]) 333*7c478bd9Sstevel@tonic-gate #define _POLY6(x, c) (_POLY5((x), (c)) * (x) + (c)[6]) 334*7c478bd9Sstevel@tonic-gate #define _POLY7(x, c) (_POLY6((x), (c)) * (x) + (c)[7]) 335*7c478bd9Sstevel@tonic-gate #define _POLY8(x, c) (_POLY7((x), (c)) * (x) + (c)[8]) 336*7c478bd9Sstevel@tonic-gate #define _POLY9(x, c) (_POLY8((x), (c)) * (x) + (c)[9]) 337*7c478bd9Sstevel@tonic-gate 338*7c478bd9Sstevel@tonic-gate extern int signgam; 339*7c478bd9Sstevel@tonic-gate /* 340*7c478bd9Sstevel@tonic-gate * Deprecated functions for compatibility with past. 341*7c478bd9Sstevel@tonic-gate * Changes planned for future. 342*7c478bd9Sstevel@tonic-gate */ 343*7c478bd9Sstevel@tonic-gate 344*7c478bd9Sstevel@tonic-gate extern double cabs(); /* Use double hypot(x,y) 345*7c478bd9Sstevel@tonic-gate * Traditional cabs usage is confused - 346*7c478bd9Sstevel@tonic-gate * is its argument two doubles or one struct? 347*7c478bd9Sstevel@tonic-gate */ 348*7c478bd9Sstevel@tonic-gate extern double drem(); /* Use double remainder(x,y) 349*7c478bd9Sstevel@tonic-gate * drem will disappear in a future release. 350*7c478bd9Sstevel@tonic-gate */ 351*7c478bd9Sstevel@tonic-gate extern double gamma(); /* Use double lgamma(x) 352*7c478bd9Sstevel@tonic-gate * to compute log of gamma function. 353*7c478bd9Sstevel@tonic-gate * Name gamma is reserved for true gamma function 354*7c478bd9Sstevel@tonic-gate * to appear in a future release. 355*7c478bd9Sstevel@tonic-gate */ 356*7c478bd9Sstevel@tonic-gate #endif /* !_POSIX_SOURCE */ 357*7c478bd9Sstevel@tonic-gate #endif /* !__math_h */ 358