\frac{x0}{1 - x1} - x0\begin{array}{l}
\mathbf{if}\;x1 \le 2.12089080810546861321705391922876060562 \cdot 10^{-4}:\\
\;\;\;\;{\left({e}^{\left(\sqrt[3]{\log \left(\mathsf{fma}\left(\sqrt[3]{x0} \cdot \sqrt[3]{x0}, \frac{\sqrt[3]{x0}}{1 - x1}, -x0\right)\right)} \cdot \sqrt[3]{\log \left(\mathsf{fma}\left(\sqrt[3]{x0} \cdot \sqrt[3]{x0}, \frac{\sqrt[3]{x0}}{1 - x1}, -x0\right)\right)}\right)}\right)}^{\left(\sqrt[3]{\log \left(\mathsf{fma}\left(\sqrt[3]{x0} \cdot \sqrt[3]{x0}, \frac{\sqrt[3]{x0}}{1 - x1}, -x0\right)\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt{x0}}{\sqrt{1} + \sqrt{x1}}, \frac{\sqrt{x0}}{\sqrt{1} - \sqrt{x1}}, -x0\right)\\
\end{array}double f(double x0, double x1) {
double r108800 = x0;
double r108801 = 1.0;
double r108802 = x1;
double r108803 = r108801 - r108802;
double r108804 = r108800 / r108803;
double r108805 = r108804 - r108800;
return r108805;
}
double f(double x0, double x1) {
double r108806 = x1;
double r108807 = 0.00021208908081054686;
bool r108808 = r108806 <= r108807;
double r108809 = exp(1.0);
double r108810 = x0;
double r108811 = cbrt(r108810);
double r108812 = r108811 * r108811;
double r108813 = 1.0;
double r108814 = r108813 - r108806;
double r108815 = r108811 / r108814;
double r108816 = -r108810;
double r108817 = fma(r108812, r108815, r108816);
double r108818 = log(r108817);
double r108819 = cbrt(r108818);
double r108820 = r108819 * r108819;
double r108821 = pow(r108809, r108820);
double r108822 = pow(r108821, r108819);
double r108823 = sqrt(r108810);
double r108824 = sqrt(r108813);
double r108825 = sqrt(r108806);
double r108826 = r108824 + r108825;
double r108827 = r108823 / r108826;
double r108828 = r108824 - r108825;
double r108829 = r108823 / r108828;
double r108830 = fma(r108827, r108829, r108816);
double r108831 = r108808 ? r108822 : r108830;
return r108831;
}




Bits error versus x0




Bits error versus x1
| Original | 7.9 |
|---|---|
| Target | 0.3 |
| Herbie | 6.1 |
if x1 < 0.00021208908081054686Initial program 11.2
rmApplied *-un-lft-identity11.2
Applied add-cube-cbrt11.2
Applied times-frac10.9
Applied fma-neg8.9
rmApplied add-exp-log8.9
Simplified8.9
rmApplied pow18.9
Applied log-pow8.9
Applied exp-prod8.9
Simplified8.9
rmApplied add-cube-cbrt8.9
Applied pow-unpow8.9
if 0.00021208908081054686 < x1 Initial program 4.6
rmApplied add-sqr-sqrt4.6
Applied add-sqr-sqrt4.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 2019323 +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))