Print this page
```5261 libm should stop using synonyms.h
5298 fabs is 0-sized, confuses dis(1) and others
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Approved by: Gordon Ross <gwr@nexenta.com>```
 ``` `````` 27 * Use is subject to license terms. 28 */ 29 30 /* 31 * arccosin function 32 * ________ 33 * / 1 - x 34 * acos(x) = 2*atan2( / -------- , 1 ) 35 * \/ 1 + x 36 * 37 * ________ 38 * / 1 - x 39 * = 2*atan ( / -------- ) for non-exceptional x. 40 * \/ 1 + x 41 * 42 * Special cases: 43 * if x is NaN, return x itself; 44 * if |x|>1, return NaN with invalid signal. 45 */ 46 47 #pragma weak acosl = __acosl 48 49 #include "libm.h" 50 51 static const long double zero = 0.0L, one = 1.0L; 52 53 long double 54 acosl(long double x) { 55 if (isnanl(x)) 56 return (x + x); 57 else if (fabsl(x) < one) 58 x = atanl(sqrtl((one - x) / (one + x))); 59 else if (x == -one) 60 x = atan2l(one, zero); /* x <- PI */ 61 else if (x == one) 62 x = zero; 63 else { /* |x| > 1 create invalid signal */ 64 return (zero / zero); 65 } 66 return (x + x); 67 } ``` ``` `````` 27 * Use is subject to license terms. 28 */ 29 30 /* 31 * arccosin function 32 * ________ 33 * / 1 - x 34 * acos(x) = 2*atan2( / -------- , 1 ) 35 * \/ 1 + x 36 * 37 * ________ 38 * / 1 - x 39 * = 2*atan ( / -------- ) for non-exceptional x. 40 * \/ 1 + x 41 * 42 * Special cases: 43 * if x is NaN, return x itself; 44 * if |x|>1, return NaN with invalid signal. 45 */ 46 47 #pragma weak __acosl = acosl 48 49 #include "libm.h" 50 51 static const long double zero = 0.0L, one = 1.0L; 52 53 long double 54 acosl(long double x) { 55 if (isnanl(x)) 56 return (x + x); 57 else if (fabsl(x) < one) 58 x = atanl(sqrtl((one - x) / (one + x))); 59 else if (x == -one) 60 x = atan2l(one, zero); /* x <- PI */ 61 else if (x == one) 62 x = zero; 63 else { /* |x| > 1 create invalid signal */ 64 return (zero / zero); 65 } 66 return (x + x); 67 } ```