xref: /plan9/sys/src/libc/port/tanh.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1 #include <u.h>
2 #include <libc.h>
3 
4 /*
5 	tanh(arg) computes the hyperbolic tangent of its floating
6 	point argument.
7 
8 	sinh and cosh are called except for large arguments, which
9 	would cause overflow improperly.
10  */
11 
12 double
tanh(double arg)13 tanh(double arg)
14 {
15 
16 	if(arg < 0) {
17 		arg = -arg;
18 		if(arg > 21)
19 			return -1;
20 		return -sinh(arg)/cosh(arg);
21 	}
22 	if(arg > 21)
23 		return 1;
24 	return sinh(arg)/cosh(arg);
25 }
26