\frac{x0}{1 - x1} - x0\begin{array}{l}
\mathbf{if}\;x0 \le 1.8749218749999998:\\
\;\;\;\;(\left(\frac{\sqrt{x0}}{\sqrt{x1} + 1}\right) \cdot \left(\frac{\sqrt{x0}}{1 - \sqrt{x1}}\right) + \left(-x0\right))_*\\
\mathbf{else}:\\
\;\;\;\;(\left(\frac{\sqrt[3]{x0} \cdot \sqrt[3]{x0}}{\sqrt{x1} + 1}\right) \cdot \left(\frac{\sqrt[3]{x0}}{1 - \sqrt{x1}}\right) + \left(-x0\right))_*\\
\end{array}double f(double x0, double x1) {
double r26626483 = x0;
double r26626484 = 1.0;
double r26626485 = x1;
double r26626486 = r26626484 - r26626485;
double r26626487 = r26626483 / r26626486;
double r26626488 = r26626487 - r26626483;
return r26626488;
}
double f(double x0, double x1) {
double r26626489 = x0;
double r26626490 = 1.8749218749999998;
bool r26626491 = r26626489 <= r26626490;
double r26626492 = sqrt(r26626489);
double r26626493 = x1;
double r26626494 = sqrt(r26626493);
double r26626495 = 1.0;
double r26626496 = r26626494 + r26626495;
double r26626497 = r26626492 / r26626496;
double r26626498 = r26626495 - r26626494;
double r26626499 = r26626492 / r26626498;
double r26626500 = -r26626489;
double r26626501 = fma(r26626497, r26626499, r26626500);
double r26626502 = cbrt(r26626489);
double r26626503 = r26626502 * r26626502;
double r26626504 = r26626503 / r26626496;
double r26626505 = r26626502 / r26626498;
double r26626506 = fma(r26626504, r26626505, r26626500);
double r26626507 = r26626491 ? r26626501 : r26626506;
return r26626507;
}




Bits error versus x0




Bits error versus x1
| Original | 7.9 |
|---|---|
| Target | 0.3 |
| Herbie | 6.1 |
if x0 < 1.8749218749999998Initial program 7.4
rmApplied add-sqr-sqrt7.4
Applied *-un-lft-identity7.4
Applied difference-of-squares7.4
Applied add-sqr-sqrt7.4
Applied times-frac7.4
Applied fma-neg5.3
if 1.8749218749999998 < x0 Initial program 8.3
rmApplied add-sqr-sqrt8.3
Applied *-un-lft-identity8.3
Applied difference-of-squares8.3
Applied add-cube-cbrt8.3
Applied times-frac8.1
Applied fma-neg6.9
Final simplification6.1
herbie shell --seed 2019104 +o rules:numerics
(FPCore (x0 x1)
:name "(- (/ x0 (- 1 x1)) x0)"
:pre (or (and (== x0 1.855) (== x1 0.000209)) (and (== x0 2.985) (== x1 0.0186)))
:herbie-target
(/ (* x0 x1) (- 1 x1))
(- (/ x0 (- 1 x1)) x0))