1 2 /* @(#)w_asin.c 5.1 93/09/24 */ 3 /* 4 * ==================================================== 5 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 6 * 7 * Developed at SunPro, a Sun Microsystems, Inc. business. 8 * Permission to use, copy, modify, and distribute this 9 * software is freely granted, provided that this notice 10 * is preserved. 11 * ==================================================== 12 * 13 */ 14 15 /* 16 FUNCTION 17 <<asin>>, <<asinf>>---arc sine 18 19 INDEX 20 asin 21 INDEX 22 asinf 23 24 ANSI_SYNOPSIS 25 #include <math.h> 26 double asin(double <[x]>); 27 float asinf(float <[x]>); 28 29 TRAD_SYNOPSIS 30 #include <math.h> 31 double asin(<[x]>) 32 double <[x]>; 33 34 float asinf(<[x]>) 35 float <[x]>; 36 37 38 DESCRIPTION 39 40 <<asin>> computes the inverse sine (arc sine) of the argument <[x]>. 41 Arguments to <<asin>> must be in the range @minus{}1 to 1. 42 43 <<asinf>> is identical to <<asin>>, other than taking and 44 returning floats. 45 46 You can modify error handling for these routines using <<matherr>>. 47 48 RETURNS 49 @ifinfo 50 <<asin>> returns values in radians, in the range of -pi/2 to pi/2. 51 @end ifinfo 52 @tex 53 <<asin>> returns values in radians, in the range of $-\pi/2$ to $\pi/2$. 54 @end tex 55 56 If <[x]> is not in the range @minus{}1 to 1, <<asin>> and <<asinf>> 57 return NaN (not a number), set the global variable <<errno>> to 58 <<EDOM>>, and issue a <<DOMAIN error>> message. 59 60 You can change this error treatment using <<matherr>>. 61 62 QUICKREF ANSI SVID POSIX RENTRANT 63 asin y,y,y,m 64 asinf n,n,n,m 65 66 MATHREF 67 asin, -1<=arg<=1, asin(arg),,, 68 asin, NAN, arg,EDOM, DOMAIN 69 70 MATHREF 71 asinf, -1<=arg<=1, asin(arg),,, 72 asinf, NAN, arg,EDOM, DOMAIN 73 74 75 */ 76 77 /* 78 * wrapper asin(x) 79 */ 80 81 82 #include "fdlibm.h" 83 #include <errno.h> 84 85 #ifndef _DOUBLE_IS_32BITS 86 87 #ifdef __STDC__ asin(double x)88 double asin(double x) /* wrapper asin */ 89 #else 90 double asin(x) /* wrapper asin */ 91 double x; 92 #endif 93 { 94 #ifdef _IEEE_LIBM 95 return __ieee754_asin(x); 96 #else 97 double z; 98 struct exception exc; 99 z = __ieee754_asin(x); 100 if(_LIB_VERSION == _IEEE_ || isnan(x)) return z; 101 if(fabs(x)>1.0) { 102 /* asin(|x|>1) */ 103 exc.type = DOMAIN; 104 exc.name = "asin"; 105 exc.err = 0; 106 exc.arg1 = exc.arg2 = x; 107 exc.retval = 0.0; 108 if(_LIB_VERSION == _POSIX_) 109 errno = EDOM; 110 else if (!matherr(&exc)) { 111 errno = EDOM; 112 } 113 if (exc.err != 0) 114 errno = exc.err; 115 return exc.retval; 116 } else 117 return z; 118 #endif 119 } 120 121 #endif /* defined(_DOUBLE_IS_32BITS) */ 122