1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -102786700.59358019 \lor \neg \left(y \le 138811322.44829124\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{y} - \frac{x}{y}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{y + 1}{y}} - \left(\frac{1}{\frac{y + 1}{y}} - 1\right)\\
\end{array}double f(double x, double y) {
double r692854 = 1.0;
double r692855 = x;
double r692856 = r692854 - r692855;
double r692857 = y;
double r692858 = r692856 * r692857;
double r692859 = r692857 + r692854;
double r692860 = r692858 / r692859;
double r692861 = r692854 - r692860;
return r692861;
}
double f(double x, double y) {
double r692862 = y;
double r692863 = -102786700.59358019;
bool r692864 = r692862 <= r692863;
double r692865 = 138811322.44829124;
bool r692866 = r692862 <= r692865;
double r692867 = !r692866;
bool r692868 = r692864 || r692867;
double r692869 = 1.0;
double r692870 = 1.0;
double r692871 = r692870 / r692862;
double r692872 = x;
double r692873 = r692872 / r692862;
double r692874 = r692871 - r692873;
double r692875 = fma(r692869, r692874, r692872);
double r692876 = r692862 + r692869;
double r692877 = r692876 / r692862;
double r692878 = r692872 / r692877;
double r692879 = r692869 / r692877;
double r692880 = r692879 - r692869;
double r692881 = r692878 - r692880;
double r692882 = r692868 ? r692875 : r692881;
return r692882;
}




Bits error versus x




Bits error versus y
| Original | 22.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if y < -102786700.59358019 or 138811322.44829124 < y Initial program 46.2
Simplified29.2
rmApplied *-un-lft-identity29.2
Applied add-cube-cbrt30.0
Applied times-frac30.0
Simplified30.0
rmApplied fma-udef30.0
Simplified29.3
Taylor expanded around inf 0.2
Simplified0.2
if -102786700.59358019 < y < 138811322.44829124Initial program 0.1
Simplified0.1
rmApplied *-un-lft-identity0.1
Applied add-cube-cbrt0.5
Applied times-frac0.5
Simplified0.5
rmApplied fma-udef0.5
Simplified0.2
rmApplied div-sub0.2
Applied associate-+l-0.2
Final simplification0.2
herbie shell --seed 2020083 +o rules:numerics
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:precision binary64
:herbie-target
(if (< y -3693.8482788297247) (- (/ 1 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1 (/ (* (- 1 x) y) (+ y 1))) (- (/ 1 y) (- (/ x y) x))))
(- 1 (/ (* (- 1 x) y) (+ y 1))))