\frac{x0}{1 - x1} - x0\mathsf{fma}\left(\frac{\sqrt{x0}}{1 + \sqrt{x1}}, \frac{\sqrt{x0}}{1 - \sqrt{x1}}, -x0\right)double f(double x0, double x1) {
double r18322995 = x0;
double r18322996 = 1.0;
double r18322997 = x1;
double r18322998 = r18322996 - r18322997;
double r18322999 = r18322995 / r18322998;
double r18323000 = r18322999 - r18322995;
return r18323000;
}
double f(double x0, double x1) {
double r18323001 = x0;
double r18323002 = sqrt(r18323001);
double r18323003 = 1.0;
double r18323004 = x1;
double r18323005 = sqrt(r18323004);
double r18323006 = r18323003 + r18323005;
double r18323007 = r18323002 / r18323006;
double r18323008 = r18323003 - r18323005;
double r18323009 = r18323002 / r18323008;
double r18323010 = -r18323001;
double r18323011 = fma(r18323007, r18323009, r18323010);
return r18323011;
}




Bits error versus x0




Bits error versus x1
| Original | 8.0 |
|---|---|
| Target | 0.2 |
| Herbie | 7.3 |
Initial program 8.0
rmApplied add-sqr-sqrt8.0
Applied *-un-lft-identity8.0
Applied difference-of-squares8.0
Applied add-sqr-sqrt8.0
Applied times-frac8.3
Applied fma-neg7.3
Final simplification7.3
herbie shell --seed 2019135 +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))