\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 6.7475079204883884 \cdot 10^{-234}:\\
\;\;\;\;1\\
\mathbf{elif}\;\left(y \cdot 4\right) \cdot y \le 3356228.6077285837:\\
\;\;\;\;\left(\sqrt[3]{\frac{x \cdot x - \left(y \cdot 4\right) \cdot y}{x \cdot x + \left(y \cdot 4\right) \cdot y}} \cdot \sqrt[3]{\frac{x \cdot x - \left(y \cdot 4\right) \cdot y}{x \cdot x + \left(y \cdot 4\right) \cdot y}}\right) \cdot \sqrt[3]{\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 6.70654513150967042 \cdot 10^{125}:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;-1\\
\end{array}double f(double x, double y) {
double r791806 = x;
double r791807 = r791806 * r791806;
double r791808 = y;
double r791809 = 4.0;
double r791810 = r791808 * r791809;
double r791811 = r791810 * r791808;
double r791812 = r791807 - r791811;
double r791813 = r791807 + r791811;
double r791814 = r791812 / r791813;
return r791814;
}
double f(double x, double y) {
double r791815 = y;
double r791816 = 4.0;
double r791817 = r791815 * r791816;
double r791818 = r791817 * r791815;
double r791819 = 6.747507920488388e-234;
bool r791820 = r791818 <= r791819;
double r791821 = 1.0;
double r791822 = 3356228.6077285837;
bool r791823 = r791818 <= r791822;
double r791824 = x;
double r791825 = r791824 * r791824;
double r791826 = r791825 - r791818;
double r791827 = r791825 + r791818;
double r791828 = r791826 / r791827;
double r791829 = cbrt(r791828);
double r791830 = r791829 * r791829;
double r791831 = r791830 * r791829;
double r791832 = 6.7065451315096704e+125;
bool r791833 = r791818 <= r791832;
double r791834 = -1.0;
double r791835 = r791833 ? r791821 : r791834;
double r791836 = r791823 ? r791831 : r791835;
double r791837 = r791820 ? r791821 : r791836;
return r791837;
}




Bits error versus x




Bits error versus y
Results
| Original | 31.9 |
|---|---|
| Target | 31.6 |
| Herbie | 14.7 |
if (* (* y 4.0) y) < 6.747507920488388e-234 or 3356228.6077285837 < (* (* y 4.0) y) < 6.7065451315096704e+125Initial program 24.7
Taylor expanded around inf 16.0
if 6.747507920488388e-234 < (* (* y 4.0) y) < 3356228.6077285837Initial program 15.9
rmApplied add-cube-cbrt15.9
if 6.7065451315096704e+125 < (* (* y 4.0) y) Initial program 47.2
Taylor expanded around 0 12.7
Final simplification14.7
herbie shell --seed 2020020 +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))))