\frac{x \cdot x - \left(y \cdot 4\right) \cdot y}{x \cdot x + \left(y \cdot 4\right) \cdot y}\begin{array}{l}
\mathbf{if}\;\left(y \cdot 4\right) \cdot y \le 4.6888524311529329 \cdot 10^{-150}:\\
\;\;\;\;1\\
\mathbf{elif}\;\left(y \cdot 4\right) \cdot y \le 3.03257274616522845 \cdot 10^{-117}:\\
\;\;\;\;\frac{x \cdot x - \left(y \cdot 4\right) \cdot y}{x \cdot x + \left(y \cdot 4\right) \cdot y}\\
\mathbf{elif}\;\left(y \cdot 4\right) \cdot y \le 3.80478009492825009 \cdot 10^{-5}:\\
\;\;\;\;1\\
\mathbf{elif}\;\left(y \cdot 4\right) \cdot y \le 7.769551355955981 \cdot 10^{204}:\\
\;\;\;\;\frac{x \cdot x - \left(y \cdot 4\right) \cdot y}{x \cdot x + \left(y \cdot 4\right) \cdot y}\\
\mathbf{else}:\\
\;\;\;\;-1\\
\end{array}double f(double x, double y) {
double r600167 = x;
double r600168 = r600167 * r600167;
double r600169 = y;
double r600170 = 4.0;
double r600171 = r600169 * r600170;
double r600172 = r600171 * r600169;
double r600173 = r600168 - r600172;
double r600174 = r600168 + r600172;
double r600175 = r600173 / r600174;
return r600175;
}
double f(double x, double y) {
double r600176 = y;
double r600177 = 4.0;
double r600178 = r600176 * r600177;
double r600179 = r600178 * r600176;
double r600180 = 4.688852431152933e-150;
bool r600181 = r600179 <= r600180;
double r600182 = 1.0;
double r600183 = 3.0325727461652284e-117;
bool r600184 = r600179 <= r600183;
double r600185 = x;
double r600186 = r600185 * r600185;
double r600187 = r600186 - r600179;
double r600188 = r600186 + r600179;
double r600189 = r600187 / r600188;
double r600190 = 3.80478009492825e-05;
bool r600191 = r600179 <= r600190;
double r600192 = 7.769551355955981e+204;
bool r600193 = r600179 <= r600192;
double r600194 = -1.0;
double r600195 = r600193 ? r600189 : r600194;
double r600196 = r600191 ? r600182 : r600195;
double r600197 = r600184 ? r600189 : r600196;
double r600198 = r600181 ? r600182 : r600197;
return r600198;
}




Bits error versus x




Bits error versus y
Results
| Original | 31.9 |
|---|---|
| Target | 31.6 |
| Herbie | 14.3 |
if (* (* y 4.0) y) < 4.688852431152933e-150 or 3.0325727461652284e-117 < (* (* y 4.0) y) < 3.80478009492825e-05Initial program 24.3
Taylor expanded around inf 15.4
if 4.688852431152933e-150 < (* (* y 4.0) y) < 3.0325727461652284e-117 or 3.80478009492825e-05 < (* (* y 4.0) y) < 7.769551355955981e+204Initial program 15.8
if 7.769551355955981e+204 < (* (* y 4.0) y) Initial program 52.1
Taylor expanded around 0 11.8
Final simplification14.3
herbie shell --seed 2020039 +o rules:numerics
(FPCore (x y)
:name "Diagrams.TwoD.Arc:arcBetween from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< (/ (- (* x x) (* (* y 4) y)) (+ (* x x) (* (* y 4) y))) 0.9743233849626781) (- (/ (* x x) (+ (* x x) (* (* y y) 4))) (/ (* (* y y) 4) (+ (* x x) (* (* y y) 4)))) (- (pow (/ x (sqrt (+ (* x x) (* (* y y) 4)))) 2) (/ (* (* y y) 4) (+ (* x x) (* (* y y) 4)))))
(/ (- (* x x) (* (* y 4) y)) (+ (* x x) (* (* y 4) y))))