1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -0.99061126335873073 \lor \neg \left(y \le 77921780.708448023\right):\\
\;\;\;\;1 \cdot \left(\frac{1}{y} - \frac{x}{y}\right) + x\\
\mathbf{else}:\\
\;\;\;\;1 - \frac{\frac{\left(1 - x\right) \cdot y}{\sqrt{y + 1}}}{\sqrt{y + 1}}\\
\end{array}double f(double x, double y) {
double r790348 = 1.0;
double r790349 = x;
double r790350 = r790348 - r790349;
double r790351 = y;
double r790352 = r790350 * r790351;
double r790353 = r790351 + r790348;
double r790354 = r790352 / r790353;
double r790355 = r790348 - r790354;
return r790355;
}
double f(double x, double y) {
double r790356 = y;
double r790357 = -0.9906112633587307;
bool r790358 = r790356 <= r790357;
double r790359 = 77921780.70844802;
bool r790360 = r790356 <= r790359;
double r790361 = !r790360;
bool r790362 = r790358 || r790361;
double r790363 = 1.0;
double r790364 = 1.0;
double r790365 = r790364 / r790356;
double r790366 = x;
double r790367 = r790366 / r790356;
double r790368 = r790365 - r790367;
double r790369 = r790363 * r790368;
double r790370 = r790369 + r790366;
double r790371 = r790363 - r790366;
double r790372 = r790371 * r790356;
double r790373 = r790356 + r790363;
double r790374 = sqrt(r790373);
double r790375 = r790372 / r790374;
double r790376 = r790375 / r790374;
double r790377 = r790363 - r790376;
double r790378 = r790362 ? r790370 : r790377;
return r790378;
}




Bits error versus x




Bits error versus y
Results
| Original | 22.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if y < -0.9906112633587307 or 77921780.70844802 < y Initial program 45.4
Taylor expanded around inf 0.6
Simplified0.6
if -0.9906112633587307 < y < 77921780.70844802Initial program 0.1
rmApplied add-sqr-sqrt0.1
Applied associate-/r*0.1
Final simplification0.3
herbie shell --seed 2020021
(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))))