\frac{x0}{1 - x1} - x0\begin{array}{l}
\mathbf{if}\;x1 \le 0.018204597656249998:\\
\;\;\;\;\mathsf{fma}\left(\sqrt[3]{x0} \cdot \sqrt[3]{x0}, \frac{\sqrt[3]{x0}}{1 - x1}, -x0\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt{x0}}{1 + \sqrt{x1}}, \frac{\sqrt{x0}}{1 - \sqrt{x1}}, -x0\right)\\
\end{array}double f(double x0, double x1) {
double r4543668 = x0;
double r4543669 = 1.0;
double r4543670 = x1;
double r4543671 = r4543669 - r4543670;
double r4543672 = r4543668 / r4543671;
double r4543673 = r4543672 - r4543668;
return r4543673;
}
double f(double x0, double x1) {
double r4543674 = x1;
double r4543675 = 0.018204597656249998;
bool r4543676 = r4543674 <= r4543675;
double r4543677 = x0;
double r4543678 = cbrt(r4543677);
double r4543679 = r4543678 * r4543678;
double r4543680 = 1.0;
double r4543681 = r4543680 - r4543674;
double r4543682 = r4543678 / r4543681;
double r4543683 = -r4543677;
double r4543684 = fma(r4543679, r4543682, r4543683);
double r4543685 = sqrt(r4543677);
double r4543686 = sqrt(r4543674);
double r4543687 = r4543680 + r4543686;
double r4543688 = r4543685 / r4543687;
double r4543689 = r4543680 - r4543686;
double r4543690 = r4543685 / r4543689;
double r4543691 = fma(r4543688, r4543690, r4543683);
double r4543692 = r4543676 ? r4543684 : r4543691;
return r4543692;
}




Bits error versus x0




Bits error versus x1
| Original | 7.9 |
|---|---|
| Target | 0.3 |
| Herbie | 6.1 |
if x1 < 0.018204597656249998Initial program 11.2
rmApplied *-un-lft-identity11.2
Applied *-un-lft-identity11.2
Applied distribute-lft-out--11.2
Applied add-cube-cbrt11.2
Applied times-frac10.9
Applied fma-neg8.9
if 0.018204597656249998 < x1 Initial program 4.6
rmApplied add-sqr-sqrt4.6
Applied *-un-lft-identity4.6
Applied difference-of-squares4.6
Applied add-sqr-sqrt4.6
Applied times-frac5.2
Applied fma-neg3.2
Final simplification6.1
herbie shell --seed 2019149 +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))