1*9926Ssam /* @(#)asin.c 4.1 12/25/82 */ 2*9926Ssam 3*9926Ssam /* 4*9926Ssam asin(arg) and acos(arg) return the arcsin, arccos, 5*9926Ssam respectively of their arguments. 6*9926Ssam 7*9926Ssam Arctan is called after appropriate range reduction. 8*9926Ssam */ 9*9926Ssam 10*9926Ssam #include <errno.h> 11*9926Ssam int errno; 12*9926Ssam double atan(); 13*9926Ssam double sqrt(); 14*9926Ssam static double pio2 = 1.570796326794896619; 15*9926Ssam 16*9926Ssam double asin(arg)17*9926Ssamasin(arg) double arg; { 18*9926Ssam 19*9926Ssam double sign, temp; 20*9926Ssam 21*9926Ssam sign = 1.; 22*9926Ssam if(arg <0){ 23*9926Ssam arg = -arg; 24*9926Ssam sign = -1.; 25*9926Ssam } 26*9926Ssam 27*9926Ssam if(arg > 1.){ 28*9926Ssam errno = EDOM; 29*9926Ssam return(0.); 30*9926Ssam } 31*9926Ssam 32*9926Ssam temp = sqrt(1. - arg*arg); 33*9926Ssam if(arg > 0.7) 34*9926Ssam temp = pio2 - atan(temp/arg); 35*9926Ssam else 36*9926Ssam temp = atan(arg/temp); 37*9926Ssam 38*9926Ssam return(sign*temp); 39*9926Ssam } 40*9926Ssam 41*9926Ssam double acos(arg)42*9926Ssamacos(arg) double arg; { 43*9926Ssam 44*9926Ssam if((arg > 1.) || (arg < -1.)){ 45*9926Ssam errno = EDOM; 46*9926Ssam return(0.); 47*9926Ssam } 48*9926Ssam 49*9926Ssam return(pio2 - asin(arg)); 50*9926Ssam } 51