1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -173188923.79640638828277587890625:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{y} - \frac{x}{y}, x\right)\\
\mathbf{elif}\;y \le 127597529.49763254821300506591796875:\\
\;\;\;\;\mathsf{fma}\left(\frac{x - 1}{1 + y}, y, 1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{y} - \frac{x}{y}, x\right)\\
\end{array}double f(double x, double y) {
double r33604019 = 1.0;
double r33604020 = x;
double r33604021 = r33604019 - r33604020;
double r33604022 = y;
double r33604023 = r33604021 * r33604022;
double r33604024 = r33604022 + r33604019;
double r33604025 = r33604023 / r33604024;
double r33604026 = r33604019 - r33604025;
return r33604026;
}
double f(double x, double y) {
double r33604027 = y;
double r33604028 = -173188923.7964064;
bool r33604029 = r33604027 <= r33604028;
double r33604030 = 1.0;
double r33604031 = 1.0;
double r33604032 = r33604031 / r33604027;
double r33604033 = x;
double r33604034 = r33604033 / r33604027;
double r33604035 = r33604032 - r33604034;
double r33604036 = fma(r33604030, r33604035, r33604033);
double r33604037 = 127597529.49763255;
bool r33604038 = r33604027 <= r33604037;
double r33604039 = r33604033 - r33604030;
double r33604040 = r33604030 + r33604027;
double r33604041 = r33604039 / r33604040;
double r33604042 = fma(r33604041, r33604027, r33604030);
double r33604043 = r33604038 ? r33604042 : r33604036;
double r33604044 = r33604029 ? r33604036 : r33604043;
return r33604044;
}




Bits error versus x




Bits error versus y
| Original | 22.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if y < -173188923.7964064 or 127597529.49763255 < y Initial program 45.8
Simplified29.5
Taylor expanded around inf 0.2
Simplified0.2
if -173188923.7964064 < y < 127597529.49763255Initial program 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019170 +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))))