\frac{x0}{1 - x1} - x0\mathsf{fma}\left(\left(-\sqrt{x0}\right), \left(\sqrt{x0}\right), x0\right) + \frac{\frac{\left(1 + x1\right) \cdot x0}{1 - x1 \cdot x1} \cdot \frac{\left(1 + x1\right) \cdot x0}{1 - x1 \cdot x1} - x0 \cdot x0}{x0 + \frac{\left(1 + x1\right) \cdot x0}{1 - x1 \cdot x1}}double f(double x0, double x1) {
double r3135873 = x0;
double r3135874 = 1.0;
double r3135875 = x1;
double r3135876 = r3135874 - r3135875;
double r3135877 = r3135873 / r3135876;
double r3135878 = r3135877 - r3135873;
return r3135878;
}
double f(double x0, double x1) {
double r3135879 = x0;
double r3135880 = sqrt(r3135879);
double r3135881 = -r3135880;
double r3135882 = fma(r3135881, r3135880, r3135879);
double r3135883 = 1.0;
double r3135884 = x1;
double r3135885 = r3135883 + r3135884;
double r3135886 = r3135885 * r3135879;
double r3135887 = r3135884 * r3135884;
double r3135888 = r3135883 - r3135887;
double r3135889 = r3135886 / r3135888;
double r3135890 = r3135889 * r3135889;
double r3135891 = r3135879 * r3135879;
double r3135892 = r3135890 - r3135891;
double r3135893 = r3135879 + r3135889;
double r3135894 = r3135892 / r3135893;
double r3135895 = r3135882 + r3135894;
return r3135895;
}




Bits error versus x0




Bits error versus x1
| Original | 7.8 |
|---|---|
| Target | 0.3 |
| Herbie | 5.0 |
Initial program 7.8
rmApplied add-sqr-sqrt7.8
Applied flip--7.6
Applied associate-/r/8.1
Applied prod-diff7.3
Simplified5.6
Simplified5.6
rmApplied flip--5.0
Final simplification5.0
herbie shell --seed 2019128 +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))