1.0 - \frac{\left(1.0 - x\right) \cdot y}{y + 1.0}\begin{array}{l}
\mathbf{if}\;y \le -6.66464768403957 \cdot 10^{+16}:\\
\;\;\;\;\left(x + \frac{1.0}{y}\right) - \frac{x \cdot 1.0}{y}\\
\mathbf{elif}\;y \le 157501004.5008886:\\
\;\;\;\;1.0 - y \cdot \frac{1.0 - x}{y + 1.0}\\
\mathbf{else}:\\
\;\;\;\;\left(x + \frac{1.0}{y}\right) - \frac{x \cdot 1.0}{y}\\
\end{array}double f(double x, double y) {
double r29522909 = 1.0;
double r29522910 = x;
double r29522911 = r29522909 - r29522910;
double r29522912 = y;
double r29522913 = r29522911 * r29522912;
double r29522914 = r29522912 + r29522909;
double r29522915 = r29522913 / r29522914;
double r29522916 = r29522909 - r29522915;
return r29522916;
}
double f(double x, double y) {
double r29522917 = y;
double r29522918 = -6.66464768403957e+16;
bool r29522919 = r29522917 <= r29522918;
double r29522920 = x;
double r29522921 = 1.0;
double r29522922 = r29522921 / r29522917;
double r29522923 = r29522920 + r29522922;
double r29522924 = r29522920 * r29522921;
double r29522925 = r29522924 / r29522917;
double r29522926 = r29522923 - r29522925;
double r29522927 = 157501004.5008886;
bool r29522928 = r29522917 <= r29522927;
double r29522929 = r29522921 - r29522920;
double r29522930 = r29522917 + r29522921;
double r29522931 = r29522929 / r29522930;
double r29522932 = r29522917 * r29522931;
double r29522933 = r29522921 - r29522932;
double r29522934 = r29522928 ? r29522933 : r29522926;
double r29522935 = r29522919 ? r29522926 : r29522934;
return r29522935;
}




Bits error versus x




Bits error versus y
Results
| Original | 21.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if y < -6.66464768403957e+16 or 157501004.5008886 < y Initial program 45.7
Taylor expanded around inf 0.1
Simplified0.1
if -6.66464768403957e+16 < y < 157501004.5008886Initial program 0.5
rmApplied *-un-lft-identity0.5
Applied *-commutative0.5
Applied times-frac0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019158
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:herbie-target
(if (< y -3693.8482788297247) (- (/ 1.0 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1.0 (/ (* (- 1.0 x) y) (+ y 1.0))) (- (/ 1.0 y) (- (/ x y) x))))
(- 1.0 (/ (* (- 1.0 x) y) (+ y 1.0))))