86 m = signy + signx + signx;
87
88 /* when y = 0 */
89 if (y == zero)
90 switch (m) {
91 case 0:
92 return (y); /* atan(+0,+anything) */
93 case 1:
94 return (y); /* atan(-0,+anything) */
95 case 2:
96 return (PI + tiny); /* atan(+0,-anything) */
97 case 3:
98 return (-PI - tiny); /* atan(-0,-anything) */
99 }
100
101 /* when x = 0 */
102 if (x == zero)
103 return (signy == 1 ? -PIo2 - tiny : PIo2 + tiny);
104
105 /* when x is INF */
106 if (!finitel(x))
107 if (!finitel(y)) {
108 switch (m) {
109 case 0:
110 return (PIo4 + tiny); /* atan(+INF,+INF) */
111 case 1:
112 return (-PIo4 - tiny); /* atan(-INF,+INF) */
113 case 2:
114 return (PI3o4 + tiny); /* atan(+INF,-INF) */
115 case 3:
116 return (-PI3o4 - tiny); /* atan(-INF,-INF) */
117 }
118 } else {
119 switch (m) {
120 case 0:
121 return (zero); /* atan(+...,+INF) */
122 case 1:
123 return (-zero); /* atan(-...,+INF) */
124 case 2:
125 return (PI + tiny); /* atan(+...,-INF) */
126 case 3:
127 return (-PI - tiny); /* atan(-...,-INF) */
128 }
129 }
130
131 /* when y is INF */
132 if (!finitel(y))
133 return (signy == 1 ? -PIo2 - tiny : PIo2 + tiny);
134
135 /* compute y/x */
136 x = fabsl(x);
137 y = fabsl(y);
138 t = PI_lo;
139 k = (ilogbl(y) - ilogbl(x));
140
141 if (k > 120)
142 z = PIo2 + half * t;
143 else if (m > 1 && k < -120)
144 z = zero;
145 else
146 z = atanl(y / x);
147
148 switch (m) {
149 case 0:
150 return (z); /* atan(+,+) */
|
86 m = signy + signx + signx;
87
88 /* when y = 0 */
89 if (y == zero)
90 switch (m) {
91 case 0:
92 return (y); /* atan(+0,+anything) */
93 case 1:
94 return (y); /* atan(-0,+anything) */
95 case 2:
96 return (PI + tiny); /* atan(+0,-anything) */
97 case 3:
98 return (-PI - tiny); /* atan(-0,-anything) */
99 }
100
101 /* when x = 0 */
102 if (x == zero)
103 return (signy == 1 ? -PIo2 - tiny : PIo2 + tiny);
104
105 /* when x is INF */
106 if (!finitel(x)) {
107 if (!finitel(y)) {
108 switch (m) {
109 case 0:
110 return (PIo4 + tiny); /* atan(+INF,+INF) */
111 case 1:
112 return (-PIo4 - tiny); /* atan(-INF,+INF) */
113 case 2:
114 return (PI3o4 + tiny); /* atan(+INF,-INF) */
115 case 3:
116 return (-PI3o4 - tiny); /* atan(-INF,-INF) */
117 }
118 } else {
119 switch (m) {
120 case 0:
121 return (zero); /* atan(+...,+INF) */
122 case 1:
123 return (-zero); /* atan(-...,+INF) */
124 case 2:
125 return (PI + tiny); /* atan(+...,-INF) */
126 case 3:
127 return (-PI - tiny); /* atan(-...,-INF) */
128 }
129 }
130 }
131 /* when y is INF */
132 if (!finitel(y))
133 return (signy == 1 ? -PIo2 - tiny : PIo2 + tiny);
134
135 /* compute y/x */
136 x = fabsl(x);
137 y = fabsl(y);
138 t = PI_lo;
139 k = (ilogbl(y) - ilogbl(x));
140
141 if (k > 120)
142 z = PIo2 + half * t;
143 else if (m > 1 && k < -120)
144 z = zero;
145 else
146 z = atanl(y / x);
147
148 switch (m) {
149 case 0:
150 return (z); /* atan(+,+) */
|