\frac{x0}{1 - x1} - x0\begin{array}{l}
\mathbf{if}\;x1 \le 2.12089080810546861321705391922876060562 \cdot 10^{-4}:\\
\;\;\;\;\frac{x0 \cdot \frac{\log \left(\sqrt{e^{\frac{{x0}^{3}}{{\left(1 - x1\right)}^{6}} - {x0}^{3}}}\right) + \log \left(\sqrt{e^{\frac{{x0}^{3}}{{\left(1 - x1\right)}^{6}} - {x0}^{3}}}\right)}{x0 \cdot x0 + \left(\frac{x0}{\left(1 - x1\right) \cdot \left(1 - x1\right)} + x0\right) \cdot \frac{x0}{\left(1 - x1\right) \cdot \left(1 - x1\right)}}}{\frac{x0}{1 - x1} + x0}\\
\mathbf{else}:\\
\;\;\;\;\frac{x0 \cdot \frac{\log \left(e^{\frac{{x0}^{3}}{{\left(\sqrt{1} + \sqrt{x1}\right)}^{6} \cdot {\left(\sqrt{1} - \sqrt{x1}\right)}^{6}} - {x0}^{3}}\right)}{x0 \cdot x0 + \left(\frac{x0}{\left(1 - x1\right) \cdot \left(1 - x1\right)} + x0\right) \cdot \frac{x0}{\left(1 - x1\right) \cdot \left(1 - x1\right)}}}{\frac{x0}{1 - x1} + x0}\\
\end{array}double f(double x0, double x1) {
double r145001 = x0;
double r145002 = 1.0;
double r145003 = x1;
double r145004 = r145002 - r145003;
double r145005 = r145001 / r145004;
double r145006 = r145005 - r145001;
return r145006;
}
double f(double x0, double x1) {
double r145007 = x1;
double r145008 = 0.00021208908081054686;
bool r145009 = r145007 <= r145008;
double r145010 = x0;
double r145011 = 3.0;
double r145012 = pow(r145010, r145011);
double r145013 = 1.0;
double r145014 = r145013 - r145007;
double r145015 = 6.0;
double r145016 = pow(r145014, r145015);
double r145017 = r145012 / r145016;
double r145018 = r145017 - r145012;
double r145019 = exp(r145018);
double r145020 = sqrt(r145019);
double r145021 = log(r145020);
double r145022 = r145021 + r145021;
double r145023 = r145010 * r145010;
double r145024 = r145014 * r145014;
double r145025 = r145010 / r145024;
double r145026 = r145025 + r145010;
double r145027 = r145026 * r145025;
double r145028 = r145023 + r145027;
double r145029 = r145022 / r145028;
double r145030 = r145010 * r145029;
double r145031 = r145010 / r145014;
double r145032 = r145031 + r145010;
double r145033 = r145030 / r145032;
double r145034 = sqrt(r145013);
double r145035 = sqrt(r145007);
double r145036 = r145034 + r145035;
double r145037 = pow(r145036, r145015);
double r145038 = r145034 - r145035;
double r145039 = pow(r145038, r145015);
double r145040 = r145037 * r145039;
double r145041 = r145012 / r145040;
double r145042 = r145041 - r145012;
double r145043 = exp(r145042);
double r145044 = log(r145043);
double r145045 = r145044 / r145028;
double r145046 = r145010 * r145045;
double r145047 = r145046 / r145032;
double r145048 = r145009 ? r145033 : r145047;
return r145048;
}




Bits error versus x0




Bits error versus x1
Results
| Original | 7.9 |
|---|---|
| Target | 0.2 |
| Herbie | 2.1 |
if x1 < 0.00021208908081054686Initial program 11.2
rmApplied flip--11.4
Simplified8.7
rmApplied flip3--6.0
Simplified6.0
rmApplied add-log-exp6.0
Applied add-log-exp6.0
Applied diff-log5.2
Simplified5.2
rmApplied add-sqr-sqrt3.5
Applied log-prod2.6
if 0.00021208908081054686 < x1 Initial program 4.5
rmApplied flip--3.1
Simplified3.8
rmApplied flip3--3.9
Simplified3.9
rmApplied add-log-exp3.9
Applied add-log-exp3.9
Applied diff-log4.0
Simplified3.8
rmApplied add-sqr-sqrt3.8
Applied add-sqr-sqrt3.8
Applied difference-of-squares3.8
Applied unpow-prod-down1.6
Final simplification2.1
herbie shell --seed 2019325
(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))