1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -99997189.22729729115962982177734375 \lor \neg \left(y \le 176788432.6068610250949859619140625\right):\\
\;\;\;\;x + \left(\frac{1}{y} - 1 \cdot \frac{x}{y}\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \left(1 - x\right) \cdot \left(y \cdot \frac{1}{y + 1}\right)\\
\end{array}double f(double x, double y) {
double r464422 = 1.0;
double r464423 = x;
double r464424 = r464422 - r464423;
double r464425 = y;
double r464426 = r464424 * r464425;
double r464427 = r464425 + r464422;
double r464428 = r464426 / r464427;
double r464429 = r464422 - r464428;
return r464429;
}
double f(double x, double y) {
double r464430 = y;
double r464431 = -99997189.22729729;
bool r464432 = r464430 <= r464431;
double r464433 = 176788432.60686103;
bool r464434 = r464430 <= r464433;
double r464435 = !r464434;
bool r464436 = r464432 || r464435;
double r464437 = x;
double r464438 = 1.0;
double r464439 = r464438 / r464430;
double r464440 = r464437 / r464430;
double r464441 = r464438 * r464440;
double r464442 = r464439 - r464441;
double r464443 = r464437 + r464442;
double r464444 = r464438 - r464437;
double r464445 = 1.0;
double r464446 = r464430 + r464438;
double r464447 = r464445 / r464446;
double r464448 = r464430 * r464447;
double r464449 = r464444 * r464448;
double r464450 = r464438 - r464449;
double r464451 = r464436 ? r464443 : r464450;
return r464451;
}




Bits error versus x




Bits error versus y
Results
| Original | 22.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if y < -99997189.22729729 or 176788432.60686103 < y Initial program 46.1
rmApplied *-un-lft-identity46.1
Applied times-frac29.4
Simplified29.4
rmApplied div-inv29.5
Taylor expanded around inf 0.1
Simplified0.1
if -99997189.22729729 < y < 176788432.60686103Initial program 0.2
rmApplied *-un-lft-identity0.2
Applied times-frac0.2
Simplified0.2
rmApplied div-inv0.2
Final simplification0.2
herbie shell --seed 2019304
(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))))