Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(578)

Side by Side Diff: fusl/src/math/atanf.c

Issue 1714623002: [fusl] clang-format fusl (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: headers too Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* origin: FreeBSD /usr/src/lib/msun/src/s_atanf.c */ 1 /* origin: FreeBSD /usr/src/lib/msun/src/s_atanf.c */
2 /* 2 /*
3 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. 3 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
4 */ 4 */
5 /* 5 /*
6 * ==================================================== 6 * ====================================================
7 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 7 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8 * 8 *
9 * Developed at SunPro, a Sun Microsystems, Inc. business. 9 * Developed at SunPro, a Sun Microsystems, Inc. business.
10 * Permission to use, copy, modify, and distribute this 10 * Permission to use, copy, modify, and distribute this
11 * software is freely granted, provided that this notice 11 * software is freely granted, provided that this notice
12 * is preserved. 12 * is preserved.
13 * ==================================================== 13 * ====================================================
14 */ 14 */
15 15
16
17 #include "libm.h" 16 #include "libm.h"
18 17
19 static const float atanhi[] = { 18 static const float atanhi[] = {
20 4.6364760399e-01, /* atan(0.5)hi 0x3eed6338 */ 19 4.6364760399e-01, /* atan(0.5)hi 0x3eed6338 */
21 7.8539812565e-01, /* atan(1.0)hi 0x3f490fda */ 20 7.8539812565e-01, /* atan(1.0)hi 0x3f490fda */
22 9.8279368877e-01, /* atan(1.5)hi 0x3f7b985e */ 21 9.8279368877e-01, /* atan(1.5)hi 0x3f7b985e */
23 1.5707962513e+00, /* atan(inf)hi 0x3fc90fda */ 22 1.5707962513e+00, /* atan(inf)hi 0x3fc90fda */
24 }; 23 };
25 24
26 static const float atanlo[] = { 25 static const float atanlo[] = {
27 5.0121582440e-09, /* atan(0.5)lo 0x31ac3769 */ 26 5.0121582440e-09, /* atan(0.5)lo 0x31ac3769 */
28 3.7748947079e-08, /* atan(1.0)lo 0x33222168 */ 27 3.7748947079e-08, /* atan(1.0)lo 0x33222168 */
29 3.4473217170e-08, /* atan(1.5)lo 0x33140fb4 */ 28 3.4473217170e-08, /* atan(1.5)lo 0x33140fb4 */
30 7.5497894159e-08, /* atan(inf)lo 0x33a22168 */ 29 7.5497894159e-08, /* atan(inf)lo 0x33a22168 */
31 }; 30 };
32 31
33 static const float aT[] = { 32 static const float aT[] = {
34 3.3333328366e-01, 33 3.3333328366e-01, -1.9999158382e-01, 1.4253635705e-01,
35 -1.9999158382e-01, 34 -1.0648017377e-01, 6.1687607318e-02,
36 1.4253635705e-01,
37 -1.0648017377e-01,
38 6.1687607318e-02,
39 }; 35 };
40 36
41 float atanf(float x) 37 float atanf(float x) {
42 { 38 float_t w, s1, s2, z;
43 » float_t w,s1,s2,z; 39 uint32_t ix, sign;
44 » uint32_t ix,sign; 40 int id;
45 » int id;
46 41
47 » GET_FLOAT_WORD(ix, x); 42 GET_FLOAT_WORD(ix, x);
48 » sign = ix>>31; 43 sign = ix >> 31;
49 » ix &= 0x7fffffff; 44 ix &= 0x7fffffff;
50 » if (ix >= 0x4c800000) { /* if |x| >= 2**26 */ 45 if (ix >= 0x4c800000) { /* if |x| >= 2**26 */
51 » » if (isnan(x)) 46 if (isnan(x))
52 » » » return x; 47 return x;
53 » » z = atanhi[3] + 0x1p-120f; 48 z = atanhi[3] + 0x1p-120f;
54 » » return sign ? -z : z; 49 return sign ? -z : z;
55 » } 50 }
56 » if (ix < 0x3ee00000) { /* |x| < 0.4375 */ 51 if (ix < 0x3ee00000) { /* |x| < 0.4375 */
57 » » if (ix < 0x39800000) { /* |x| < 2**-12 */ 52 if (ix < 0x39800000) { /* |x| < 2**-12 */
58 » » » if (ix < 0x00800000) 53 if (ix < 0x00800000)
59 » » » » /* raise underflow for subnormal x */ 54 /* raise underflow for subnormal x */
60 » » » » FORCE_EVAL(x*x); 55 FORCE_EVAL(x * x);
61 » » » return x; 56 return x;
62 » » } 57 }
63 » » id = -1; 58 id = -1;
64 » } else { 59 } else {
65 » » x = fabsf(x); 60 x = fabsf(x);
66 » » if (ix < 0x3f980000) { /* |x| < 1.1875 */ 61 if (ix < 0x3f980000) { /* |x| < 1.1875 */
67 » » » if (ix < 0x3f300000) { /* 7/16 <= |x| < 11/16 */ 62 if (ix < 0x3f300000) { /* 7/16 <= |x| < 11/16 */
68 » » » » id = 0; 63 id = 0;
69 » » » » x = (2.0f*x - 1.0f)/(2.0f + x); 64 x = (2.0f * x - 1.0f) / (2.0f + x);
70 » » » } else { /* 11/16 <= |x| < 19/16 */ 65 } else { /* 11/16 <= |x| < 19/16 */
71 » » » » id = 1; 66 id = 1;
72 » » » » x = (x - 1.0f)/(x + 1.0f); 67 x = (x - 1.0f) / (x + 1.0f);
73 » » » } 68 }
74 » » } else { 69 } else {
75 » » » if (ix < 0x401c0000) { /* |x| < 2.4375 */ 70 if (ix < 0x401c0000) { /* |x| < 2.4375 */
76 » » » » id = 2; 71 id = 2;
77 » » » » x = (x - 1.5f)/(1.0f + 1.5f*x); 72 x = (x - 1.5f) / (1.0f + 1.5f * x);
78 » » » } else { /* 2.4375 <= |x| < 2**26 */ 73 } else { /* 2.4375 <= |x| < 2**26 */
79 » » » » id = 3; 74 id = 3;
80 » » » » x = -1.0f/x; 75 x = -1.0f / x;
81 » » » } 76 }
82 » » } 77 }
83 » } 78 }
84 » /* end of argument reduction */ 79 /* end of argument reduction */
85 » z = x*x; 80 z = x * x;
86 » w = z*z; 81 w = z * z;
87 » /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ 82 /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */
88 » s1 = z*(aT[0]+w*(aT[2]+w*aT[4])); 83 s1 = z * (aT[0] + w * (aT[2] + w * aT[4]));
89 » s2 = w*(aT[1]+w*aT[3]); 84 s2 = w * (aT[1] + w * aT[3]);
90 » if (id < 0) 85 if (id < 0)
91 » » return x - x*(s1+s2); 86 return x - x * (s1 + s2);
92 » z = atanhi[id] - ((x*(s1+s2) - atanlo[id]) - x); 87 z = atanhi[id] - ((x * (s1 + s2) - atanlo[id]) - x);
93 » return sign ? -z : z; 88 return sign ? -z : z;
94 } 89 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698