1.0 - \frac{\left(1.0 - x\right) \cdot y}{y + 1.0}\begin{array}{l}
\mathbf{if}\;y \le -148588481.45705655:\\
\;\;\;\;\mathsf{fma}\left(1.0, \frac{1}{y} - \frac{x}{y}, x\right)\\
\mathbf{elif}\;y \le 221673187.8082131:\\
\;\;\;\;1.0 - \frac{\left(1.0 - x\right) \cdot y}{1.0 + y}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(1.0, \frac{1}{y} - \frac{x}{y}, x\right)\\
\end{array}double f(double x, double y) {
double r21233794 = 1.0;
double r21233795 = x;
double r21233796 = r21233794 - r21233795;
double r21233797 = y;
double r21233798 = r21233796 * r21233797;
double r21233799 = r21233797 + r21233794;
double r21233800 = r21233798 / r21233799;
double r21233801 = r21233794 - r21233800;
return r21233801;
}
double f(double x, double y) {
double r21233802 = y;
double r21233803 = -148588481.45705655;
bool r21233804 = r21233802 <= r21233803;
double r21233805 = 1.0;
double r21233806 = 1.0;
double r21233807 = r21233806 / r21233802;
double r21233808 = x;
double r21233809 = r21233808 / r21233802;
double r21233810 = r21233807 - r21233809;
double r21233811 = fma(r21233805, r21233810, r21233808);
double r21233812 = 221673187.8082131;
bool r21233813 = r21233802 <= r21233812;
double r21233814 = r21233805 - r21233808;
double r21233815 = r21233814 * r21233802;
double r21233816 = r21233805 + r21233802;
double r21233817 = r21233815 / r21233816;
double r21233818 = r21233805 - r21233817;
double r21233819 = r21233813 ? r21233818 : r21233811;
double r21233820 = r21233804 ? r21233811 : r21233819;
return r21233820;
}




Bits error versus x




Bits error versus y
| Original | 21.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if y < -148588481.45705655 or 221673187.8082131 < y Initial program 45.3
Taylor expanded around inf 0.1
Simplified0.1
if -148588481.45705655 < y < 221673187.8082131Initial program 0.2
Final simplification0.1
herbie shell --seed 2019158 +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))))