code cleanup of named constants
[musl] / src / math / acoshf.c
1 /* origin: FreeBSD /usr/src/lib/msun/src/e_acoshf.c */
2 /*
3  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
4  */
5 /*
6  * ====================================================
7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8  *
9  * Developed at SunPro, a Sun Microsystems, Inc. business.
10  * Permission to use, copy, modify, and distribute this
11  * software is freely granted, provided that this notice
12  * is preserved.
13  * ====================================================
14  */
15
16 #include "libm.h"
17
18 static const float
19 ln2 = 6.9314718246e-01; /* 0x3f317218 */
20
21 float acoshf(float x)
22 {
23         float t;
24         int32_t hx;
25
26         GET_FLOAT_WORD(hx, x);
27         if (hx < 0x3f800000) {  /* x < 1 */
28                 return (x-x)/(x-x);
29         } else if (hx >= 0x4d800000) {  /* x > 2**28 */
30                 if (hx >= 0x7f800000)  /* x is inf of NaN */
31                         return x + x;
32                 return logf(x) + ln2;  /* acosh(huge)=log(2x) */
33         } else if (hx == 0x3f800000) {
34                 return 0.0f;  /* acosh(1) = 0 */
35         } else if (hx > 0x40000000) {  /* 2**28 > x > 2 */
36                 t = x*x;
37                 return logf(2.0f*x - 1.0f/(x+sqrtf(t-1.0f)));
38         } else {                /* 1 < x < 2 */
39                 t = x-1.0f;
40                 return log1pf(t + sqrtf(2.0f*t+t*t));
41         }
42 }