Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 * asin(arg) and acos(arg) return the arcsin, arccos,
3
 * respectively of their arguments.
4
 *
5
 * Arctan is called after appropriate range reduction.
6
 */
7
 
8
#include <u.h>
9
#include <libc.h>
10
 
11
double
12
asin(double arg)
13
{
14
	double temp;
15
	int sign;
16
 
17
	sign = 0;
18
	if(arg < 0) {
19
		arg = -arg;
20
		sign++;
21
	}
22
	if(arg > 1)
23
		return NaN();
24
	temp = sqrt(1 - arg*arg);
25
	if(arg > 0.7)
26
		temp = PIO2 - atan(temp/arg);
27
	else
28
		temp = atan(arg/temp);
29
	if(sign)
30
		temp = -temp;
31
	return temp;
32
}
33
 
34
double
35
acos(double arg)
36
{
37
	if(arg > 1 || arg < -1)
38
		return NaN();
39
	return PIO2 - asin(arg);
40
}