1.0 - \frac{\left(1.0 - x\right) \cdot y}{y + 1.0}\begin{array}{l}
\mathbf{if}\;y \le -120684821833.98685:\\
\;\;\;\;\left(x + \frac{\frac{x}{y} \cdot 1.0}{y}\right) - \frac{x}{y} \cdot 1.0\\
\mathbf{elif}\;y \le 4.471669177154523 \cdot 10^{+32}:\\
\;\;\;\;\mathsf{fma}\left(y, \left(1.0 \cdot 1.0 + \left(y \cdot y - 1.0 \cdot y\right)\right) \cdot \frac{x - 1.0}{\mathsf{fma}\left(y, y \cdot y, \left(1.0 \cdot 1.0\right) \cdot 1.0\right)}, 1.0\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x + \frac{\frac{x}{y} \cdot 1.0}{y}\right) - \frac{x}{y} \cdot 1.0\\
\end{array}double f(double x, double y) {
double r11853432 = 1.0;
double r11853433 = x;
double r11853434 = r11853432 - r11853433;
double r11853435 = y;
double r11853436 = r11853434 * r11853435;
double r11853437 = r11853435 + r11853432;
double r11853438 = r11853436 / r11853437;
double r11853439 = r11853432 - r11853438;
return r11853439;
}
double f(double x, double y) {
double r11853440 = y;
double r11853441 = -120684821833.98685;
bool r11853442 = r11853440 <= r11853441;
double r11853443 = x;
double r11853444 = r11853443 / r11853440;
double r11853445 = 1.0;
double r11853446 = r11853444 * r11853445;
double r11853447 = r11853446 / r11853440;
double r11853448 = r11853443 + r11853447;
double r11853449 = r11853448 - r11853446;
double r11853450 = 4.471669177154523e+32;
bool r11853451 = r11853440 <= r11853450;
double r11853452 = r11853445 * r11853445;
double r11853453 = r11853440 * r11853440;
double r11853454 = r11853445 * r11853440;
double r11853455 = r11853453 - r11853454;
double r11853456 = r11853452 + r11853455;
double r11853457 = r11853443 - r11853445;
double r11853458 = r11853452 * r11853445;
double r11853459 = fma(r11853440, r11853453, r11853458);
double r11853460 = r11853457 / r11853459;
double r11853461 = r11853456 * r11853460;
double r11853462 = fma(r11853440, r11853461, r11853445);
double r11853463 = r11853451 ? r11853462 : r11853449;
double r11853464 = r11853442 ? r11853449 : r11853463;
return r11853464;
}




Bits error versus x




Bits error versus y
| Original | 21.8 |
|---|---|
| Target | 0.2 |
| Herbie | 7.4 |
if y < -120684821833.98685 or 4.471669177154523e+32 < y Initial program 45.9
Simplified30.0
rmApplied add-cube-cbrt30.7
Applied associate-/r*30.8
rmApplied fma-udef30.7
Simplified30.0
rmApplied add-cube-cbrt30.8
Applied associate-*r*30.8
Taylor expanded around inf 14.6
Simplified14.6
if -120684821833.98685 < y < 4.471669177154523e+32Initial program 1.2
Simplified1.2
rmApplied flip3-+1.2
Applied associate-/r/1.2
Simplified1.2
Final simplification7.4
herbie shell --seed 2019156 +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))))