\left(a + \left(b + \left(c + d\right)\right)\right) \cdot 2
\left(a + \left(\left(b + c\right) + d\right)\right) \cdot 2
double f(double a, double b, double c, double d) {
double r102825 = a;
double r102826 = b;
double r102827 = c;
double r102828 = d;
double r102829 = r102827 + r102828;
double r102830 = r102826 + r102829;
double r102831 = r102825 + r102830;
double r102832 = 2.0;
double r102833 = r102831 * r102832;
return r102833;
}
double f(double a, double b, double c, double d) {
double r102834 = a;
double r102835 = b;
double r102836 = c;
double r102837 = r102835 + r102836;
double r102838 = d;
double r102839 = r102837 + r102838;
double r102840 = r102834 + r102839;
double r102841 = 2.0;
double r102842 = r102840 * r102841;
return r102842;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 3.6 |
|---|---|
| Target | 3.8 |
| Herbie | 2.8 |
Initial program 3.6
rmApplied associate-+r+2.8
Final simplification2.8
herbie shell --seed 2020034
(FPCore (a b c d)
:name "Expression, p6"
:precision binary64
:pre (and (<= -14 a -13) (<= -3 b -2) (<= 3 c 3.5) (<= 12.5 d 13.5))
:herbie-target
(+ (* (+ a b) 2) (* (+ c d) 2))
(* (+ a (+ b (+ c d))) 2))