\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}\;x \cdot x \le 2.361346704065944689089216829566713485887 \cdot 10^{-173}:\\
\;\;\;\;-1\\
\mathbf{elif}\;x \cdot x \le 1.93285633875459141678597998286665816515 \cdot 10^{264}:\\
\;\;\;\;\frac{\frac{\frac{1}{\sqrt[3]{\frac{x \cdot x + \left(y \cdot 4\right) \cdot y}{x \cdot x - \left(y \cdot 4\right) \cdot y}}}}{\sqrt[3]{\frac{x \cdot x + \left(y \cdot 4\right) \cdot y}{x \cdot x - \left(y \cdot 4\right) \cdot y}}}}{\sqrt[3]{\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 r738017 = x;
double r738018 = r738017 * r738017;
double r738019 = y;
double r738020 = 4.0;
double r738021 = r738019 * r738020;
double r738022 = r738021 * r738019;
double r738023 = r738018 - r738022;
double r738024 = r738018 + r738022;
double r738025 = r738023 / r738024;
return r738025;
}
double f(double x, double y) {
double r738026 = x;
double r738027 = r738026 * r738026;
double r738028 = 2.3613467040659447e-173;
bool r738029 = r738027 <= r738028;
double r738030 = -1.0;
double r738031 = 1.9328563387545914e+264;
bool r738032 = r738027 <= r738031;
double r738033 = 1.0;
double r738034 = y;
double r738035 = 4.0;
double r738036 = r738034 * r738035;
double r738037 = r738036 * r738034;
double r738038 = r738027 + r738037;
double r738039 = r738027 - r738037;
double r738040 = r738038 / r738039;
double r738041 = cbrt(r738040);
double r738042 = r738033 / r738041;
double r738043 = r738042 / r738041;
double r738044 = r738043 / r738041;
double r738045 = r738032 ? r738044 : r738033;
double r738046 = r738029 ? r738030 : r738045;
return r738046;
}




Bits error versus x




Bits error versus y
Results
| Original | 32.2 |
|---|---|
| Target | 31.9 |
| Herbie | 12.8 |
if (* x x) < 2.3613467040659447e-173Initial program 26.7
Taylor expanded around 0 12.0
if 2.3613467040659447e-173 < (* x x) < 1.9328563387545914e+264Initial program 16.5
rmApplied clear-num16.5
rmApplied add-cube-cbrt16.5
Applied associate-/r*16.5
Simplified16.5
if 1.9328563387545914e+264 < (* x x) Initial program 58.1
Taylor expanded around inf 9.3
Final simplification12.8
herbie shell --seed 2019322
(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.974323384962678118) (- (/ (* 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))))