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(+,+) */ |