Work on file usr/src/lib/libm/asin.c
Synthesized-from: 3bsd
--- /dev/null
+/*
+ asin(arg) and acos(arg) return the arcsin, arccos,
+ respectively of their arguments.
+
+ Arctan is called after appropriate range reduction.
+*/
+
+#include <errno.h>
+int errno;
+double atan();
+double sqrt();
+static double pio2 = 1.570796326794896619;
+
+double
+asin(arg) double arg; {
+
+ double sign, temp;
+
+ sign = 1.;
+ if(arg <0){
+ arg = -arg;
+ sign = -1.;
+ }
+
+ if(arg > 1.){
+ errno = EDOM;
+ return(0.);
+ }
+
+ temp = sqrt(1. - arg*arg);
+ if(arg > 0.7)
+ temp = pio2 - atan(temp/arg);
+ else
+ temp = atan(arg/temp);
+
+ return(sign*temp);
+}
+
+double
+acos(arg) double arg; {
+
+ if((arg > 1.) || (arg < -1.)){
+ errno = EDOM;
+ return(0.);
+ }
+
+ return(pio2 - asin(arg));
+}