1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -179455656.4260170757770538330078125:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{y} - \frac{x}{y}, x\right)\\
\mathbf{elif}\;y \le 192804976.65096271038055419921875:\\
\;\;\;\;1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{y} - \frac{x}{y}, x\right)\\
\end{array}double f(double x, double y) {
double r41806775 = 1.0;
double r41806776 = x;
double r41806777 = r41806775 - r41806776;
double r41806778 = y;
double r41806779 = r41806777 * r41806778;
double r41806780 = r41806778 + r41806775;
double r41806781 = r41806779 / r41806780;
double r41806782 = r41806775 - r41806781;
return r41806782;
}
double f(double x, double y) {
double r41806783 = y;
double r41806784 = -179455656.42601708;
bool r41806785 = r41806783 <= r41806784;
double r41806786 = 1.0;
double r41806787 = 1.0;
double r41806788 = r41806787 / r41806783;
double r41806789 = x;
double r41806790 = r41806789 / r41806783;
double r41806791 = r41806788 - r41806790;
double r41806792 = fma(r41806786, r41806791, r41806789);
double r41806793 = 192804976.6509627;
bool r41806794 = r41806783 <= r41806793;
double r41806795 = r41806786 - r41806789;
double r41806796 = r41806795 * r41806783;
double r41806797 = r41806783 + r41806786;
double r41806798 = r41806796 / r41806797;
double r41806799 = r41806786 - r41806798;
double r41806800 = r41806794 ? r41806799 : r41806792;
double r41806801 = r41806785 ? r41806792 : r41806800;
return r41806801;
}




Bits error versus x




Bits error versus y
| Original | 22.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if y < -179455656.42601708 or 192804976.6509627 < y Initial program 46.3
Simplified29.6
Taylor expanded around inf 0.1
Simplified0.1
if -179455656.42601708 < y < 192804976.6509627Initial program 0.2
Final simplification0.2
herbie shell --seed 2019174 +o rules:numerics
(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))))