1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -126285643.80532795 \lor \neg \left(y \le 184531412.18592519\right):\\
\;\;\;\;\frac{1}{y} \cdot \left(1 - x\right) + x\\
\mathbf{else}:\\
\;\;\;\;1 + \left(-\left(1 - x\right)\right) \cdot \frac{y}{y + 1}\\
\end{array}double f(double x, double y) {
double r842090 = 1.0;
double r842091 = x;
double r842092 = r842090 - r842091;
double r842093 = y;
double r842094 = r842092 * r842093;
double r842095 = r842093 + r842090;
double r842096 = r842094 / r842095;
double r842097 = r842090 - r842096;
return r842097;
}
double f(double x, double y) {
double r842098 = y;
double r842099 = -126285643.80532795;
bool r842100 = r842098 <= r842099;
double r842101 = 184531412.1859252;
bool r842102 = r842098 <= r842101;
double r842103 = !r842102;
bool r842104 = r842100 || r842103;
double r842105 = 1.0;
double r842106 = r842105 / r842098;
double r842107 = 1.0;
double r842108 = x;
double r842109 = r842107 - r842108;
double r842110 = r842106 * r842109;
double r842111 = r842110 + r842108;
double r842112 = r842105 - r842108;
double r842113 = -r842112;
double r842114 = r842098 + r842105;
double r842115 = r842098 / r842114;
double r842116 = r842113 * r842115;
double r842117 = r842105 + r842116;
double r842118 = r842104 ? r842111 : r842117;
return r842118;
}




Bits error versus x




Bits error versus y
Results
| Original | 22.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if y < -126285643.80532795 or 184531412.1859252 < y Initial program 45.2
Simplified29.6
Taylor expanded around inf 0.3
Simplified0.3
if -126285643.80532795 < y < 184531412.1859252Initial program 0.2
rmApplied sub-neg0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020045 +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))))