\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 r105314 = a;
double r105315 = b;
double r105316 = c;
double r105317 = d;
double r105318 = r105316 + r105317;
double r105319 = r105315 + r105318;
double r105320 = r105314 + r105319;
double r105321 = 2.0;
double r105322 = r105320 * r105321;
return r105322;
}
double f(double a, double b, double c, double d) {
double r105323 = a;
double r105324 = b;
double r105325 = c;
double r105326 = r105324 + r105325;
double r105327 = d;
double r105328 = r105326 + r105327;
double r105329 = r105323 + r105328;
double r105330 = 2.0;
double r105331 = r105329 * r105330;
return r105331;
}




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
rmApplied add-cbrt-cube2.9
Simplified2.9
rmApplied rem-cbrt-cube2.8
Final simplification2.8
herbie shell --seed 2019323 +o rules:numerics
(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))