1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -102078540239.528106689453125 \lor \neg \left(y \le 181209685.5427190363407135009765625\right):\\
\;\;\;\;1 \cdot \left(\frac{1}{y} - \frac{x}{y}\right) + x\\
\mathbf{else}:\\
\;\;\;\;1 - \left(1 - x\right) \cdot \frac{y}{y + 1}\\
\end{array}double f(double x, double y) {
double r585487 = 1.0;
double r585488 = x;
double r585489 = r585487 - r585488;
double r585490 = y;
double r585491 = r585489 * r585490;
double r585492 = r585490 + r585487;
double r585493 = r585491 / r585492;
double r585494 = r585487 - r585493;
return r585494;
}
double f(double x, double y) {
double r585495 = y;
double r585496 = -102078540239.5281;
bool r585497 = r585495 <= r585496;
double r585498 = 181209685.54271904;
bool r585499 = r585495 <= r585498;
double r585500 = !r585499;
bool r585501 = r585497 || r585500;
double r585502 = 1.0;
double r585503 = 1.0;
double r585504 = r585503 / r585495;
double r585505 = x;
double r585506 = r585505 / r585495;
double r585507 = r585504 - r585506;
double r585508 = r585502 * r585507;
double r585509 = r585508 + r585505;
double r585510 = r585502 - r585505;
double r585511 = r585495 + r585502;
double r585512 = r585495 / r585511;
double r585513 = r585510 * r585512;
double r585514 = r585502 - r585513;
double r585515 = r585501 ? r585509 : r585514;
return r585515;
}




Bits error versus x




Bits error versus y
Results
| Original | 22.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if y < -102078540239.5281 or 181209685.54271904 < y Initial program 45.7
Taylor expanded around inf 0.1
Simplified0.1
if -102078540239.5281 < y < 181209685.54271904Initial program 0.2
rmApplied *-un-lft-identity0.2
Applied times-frac0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019298
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:precision binary64
:herbie-target
(if (< y -3693.84827882972468) (- (/ 1 y) (- (/ x y) x)) (if (< y 6799310503.41891003) (- 1 (/ (* (- 1 x) y) (+ y 1))) (- (/ 1 y) (- (/ x y) x))))
(- 1 (/ (* (- 1 x) y) (+ y 1))))