\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}\;y \le -7.71073899284975746 \cdot 10^{142}:\\
\;\;\;\;-1\\
\mathbf{elif}\;y \le -1.38415960656676321 \cdot 10^{-97}:\\
\;\;\;\;\log \left(e^{\frac{\mathsf{fma}\left(x, x, -\left(y \cdot 4\right) \cdot y\right)}{\mathsf{fma}\left(x, x, \left(y \cdot 4\right) \cdot y\right)}}\right)\\
\mathbf{elif}\;y \le 1.1196094733529732 \cdot 10^{-55}:\\
\;\;\;\;1\\
\mathbf{elif}\;y \le 28161126.972837694:\\
\;\;\;\;\log \left(e^{\frac{\mathsf{fma}\left(x, x, -\left(y \cdot 4\right) \cdot y\right)}{\mathsf{fma}\left(x, x, \left(y \cdot 4\right) \cdot y\right)}}\right)\\
\mathbf{elif}\;y \le 4.01162503157803517 \cdot 10^{38}:\\
\;\;\;\;1\\
\mathbf{elif}\;y \le 2.16201455188241352 \cdot 10^{107}:\\
\;\;\;\;\log \left(e^{\frac{\mathsf{fma}\left(x, x, -\left(y \cdot 4\right) \cdot y\right)}{\mathsf{fma}\left(x, x, \left(y \cdot 4\right) \cdot y\right)}}\right)\\
\mathbf{elif}\;y \le 4.36744780112662469 \cdot 10^{128}:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;-1\\
\end{array}double f(double x, double y) {
double r616902 = x;
double r616903 = r616902 * r616902;
double r616904 = y;
double r616905 = 4.0;
double r616906 = r616904 * r616905;
double r616907 = r616906 * r616904;
double r616908 = r616903 - r616907;
double r616909 = r616903 + r616907;
double r616910 = r616908 / r616909;
return r616910;
}
double f(double x, double y) {
double r616911 = y;
double r616912 = -7.710738992849757e+142;
bool r616913 = r616911 <= r616912;
double r616914 = -1.0;
double r616915 = -1.3841596065667632e-97;
bool r616916 = r616911 <= r616915;
double r616917 = x;
double r616918 = 4.0;
double r616919 = r616911 * r616918;
double r616920 = r616919 * r616911;
double r616921 = -r616920;
double r616922 = fma(r616917, r616917, r616921);
double r616923 = fma(r616917, r616917, r616920);
double r616924 = r616922 / r616923;
double r616925 = exp(r616924);
double r616926 = log(r616925);
double r616927 = 1.1196094733529732e-55;
bool r616928 = r616911 <= r616927;
double r616929 = 1.0;
double r616930 = 28161126.972837694;
bool r616931 = r616911 <= r616930;
double r616932 = 4.011625031578035e+38;
bool r616933 = r616911 <= r616932;
double r616934 = 2.1620145518824135e+107;
bool r616935 = r616911 <= r616934;
double r616936 = 4.367447801126625e+128;
bool r616937 = r616911 <= r616936;
double r616938 = r616937 ? r616929 : r616914;
double r616939 = r616935 ? r616926 : r616938;
double r616940 = r616933 ? r616929 : r616939;
double r616941 = r616931 ? r616926 : r616940;
double r616942 = r616928 ? r616929 : r616941;
double r616943 = r616916 ? r616926 : r616942;
double r616944 = r616913 ? r616914 : r616943;
return r616944;
}




Bits error versus x




Bits error versus y
| Original | 32.3 |
|---|---|
| Target | 32.0 |
| Herbie | 13.6 |
if y < -7.710738992849757e+142 or 4.367447801126625e+128 < y Initial program 59.1
Simplified59.1
Taylor expanded around 0 8.6
if -7.710738992849757e+142 < y < -1.3841596065667632e-97 or 1.1196094733529732e-55 < y < 28161126.972837694 or 4.011625031578035e+38 < y < 2.1620145518824135e+107Initial program 16.7
Simplified16.7
rmApplied fma-neg16.7
rmApplied add-log-exp16.7
if -1.3841596065667632e-97 < y < 1.1196094733529732e-55 or 28161126.972837694 < y < 4.011625031578035e+38 or 2.1620145518824135e+107 < y < 4.367447801126625e+128Initial program 25.0
Simplified25.0
Taylor expanded around inf 14.8
Final simplification13.6
herbie shell --seed 2020047 +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))))