\frac{x0}{1 - x1} - x0\begin{array}{l}
\mathbf{if}\;x0 \le 1.99445312499999971578290569595992565155:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt{x0}}{\sqrt{1} + \sqrt{x1}}, \frac{\sqrt{x0}}{\sqrt{1} - \sqrt{x1}}, -x0\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{{\left(\mathsf{fma}\left(\frac{{x0}^{\frac{2}{3}}}{\sqrt{1} + \sqrt{x1}}, \sqrt{\sqrt[3]{x0}} \cdot \frac{\sqrt{\sqrt[3]{x0}}}{\sqrt{1} - \sqrt{x1}}, -x0\right)\right)}^{3}}\\
\end{array}double f(double x0, double x1) {
double r142619 = x0;
double r142620 = 1.0;
double r142621 = x1;
double r142622 = r142620 - r142621;
double r142623 = r142619 / r142622;
double r142624 = r142623 - r142619;
return r142624;
}
double f(double x0, double x1) {
double r142625 = x0;
double r142626 = 1.9944531249999997;
bool r142627 = r142625 <= r142626;
double r142628 = sqrt(r142625);
double r142629 = 1.0;
double r142630 = sqrt(r142629);
double r142631 = x1;
double r142632 = sqrt(r142631);
double r142633 = r142630 + r142632;
double r142634 = r142628 / r142633;
double r142635 = r142630 - r142632;
double r142636 = r142628 / r142635;
double r142637 = -r142625;
double r142638 = fma(r142634, r142636, r142637);
double r142639 = 0.6666666666666666;
double r142640 = pow(r142625, r142639);
double r142641 = r142640 / r142633;
double r142642 = cbrt(r142625);
double r142643 = sqrt(r142642);
double r142644 = r142643 / r142635;
double r142645 = r142643 * r142644;
double r142646 = fma(r142641, r142645, r142637);
double r142647 = 3.0;
double r142648 = pow(r142646, r142647);
double r142649 = cbrt(r142648);
double r142650 = r142627 ? r142638 : r142649;
return r142650;
}




Bits error versus x0




Bits error versus x1
| Original | 7.9 |
|---|---|
| Target | 0.3 |
| Herbie | 5.5 |
if x0 < 1.9944531249999997Initial program 7.4
rmApplied add-sqr-sqrt7.4
Applied add-sqr-sqrt7.4
Applied difference-of-squares7.4
Applied add-sqr-sqrt7.4
Applied times-frac7.4
Applied fma-neg5.3
if 1.9944531249999997 < x0 Initial program 8.3
rmApplied add-sqr-sqrt8.3
Applied add-sqr-sqrt8.3
Applied difference-of-squares8.3
Applied add-cube-cbrt8.3
Applied times-frac8.1
Applied fma-neg6.9
rmApplied add-cbrt-cube6.9
Simplified7.0
rmApplied *-un-lft-identity7.0
Applied add-sqr-sqrt7.0
Applied times-frac5.7
Simplified5.7
Final simplification5.5
herbie shell --seed 2019326 +o rules:numerics
(FPCore (x0 x1)
:name "(- (/ x0 (- 1 x1)) x0)"
:precision binary64
: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))