1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -2868269604.961124897003173828125 \lor \neg \left(y \le 181304849.2823911607265472412109375\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{y} - \frac{x}{y}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-\left(1 - x\right), \frac{y}{y + 1}, {\left(\sqrt[3]{1}\right)}^{3}\right) + \frac{y}{y + 1} \cdot \left(\left(-\left(1 - x\right)\right) + \left(1 - x\right)\right)\\
\end{array}double f(double x, double y) {
double r452351 = 1.0;
double r452352 = x;
double r452353 = r452351 - r452352;
double r452354 = y;
double r452355 = r452353 * r452354;
double r452356 = r452354 + r452351;
double r452357 = r452355 / r452356;
double r452358 = r452351 - r452357;
return r452358;
}
double f(double x, double y) {
double r452359 = y;
double r452360 = -2868269604.961125;
bool r452361 = r452359 <= r452360;
double r452362 = 181304849.28239116;
bool r452363 = r452359 <= r452362;
double r452364 = !r452363;
bool r452365 = r452361 || r452364;
double r452366 = 1.0;
double r452367 = 1.0;
double r452368 = r452367 / r452359;
double r452369 = x;
double r452370 = r452369 / r452359;
double r452371 = r452368 - r452370;
double r452372 = fma(r452366, r452371, r452369);
double r452373 = r452366 - r452369;
double r452374 = -r452373;
double r452375 = r452359 + r452366;
double r452376 = r452359 / r452375;
double r452377 = cbrt(r452366);
double r452378 = 3.0;
double r452379 = pow(r452377, r452378);
double r452380 = fma(r452374, r452376, r452379);
double r452381 = r452374 + r452373;
double r452382 = r452376 * r452381;
double r452383 = r452380 + r452382;
double r452384 = r452365 ? r452372 : r452383;
return r452384;
}




Bits error versus x




Bits error versus y
| Original | 22.8 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if y < -2868269604.961125 or 181304849.28239116 < y Initial program 46.9
Simplified30.4
Taylor expanded around inf 0.1
Simplified0.1
if -2868269604.961125 < y < 181304849.28239116Initial program 0.2
rmApplied *-un-lft-identity0.2
Applied times-frac0.2
Applied add-cube-cbrt0.2
Applied prod-diff0.2
Simplified0.2
Simplified0.2
Final simplification0.1
herbie shell --seed 2019208 +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.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))))