\left(a + \left(b + \left(c + d\right)\right)\right) \cdot 2
2 \cdot \left(\left(a + d\right) + \left(b + c\right)\right)
double f(double a, double b, double c, double d) {
double r111785 = a;
double r111786 = b;
double r111787 = c;
double r111788 = d;
double r111789 = r111787 + r111788;
double r111790 = r111786 + r111789;
double r111791 = r111785 + r111790;
double r111792 = 2.0;
double r111793 = r111791 * r111792;
return r111793;
}
double f(double a, double b, double c, double d) {
double r111794 = 2.0;
double r111795 = a;
double r111796 = d;
double r111797 = r111795 + r111796;
double r111798 = b;
double r111799 = c;
double r111800 = r111798 + r111799;
double r111801 = r111797 + r111800;
double r111802 = r111794 * r111801;
return r111802;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 3.7 |
|---|---|
| Target | 3.8 |
| Herbie | 0 |
Initial program 3.7
rmApplied *-un-lft-identity3.7
Applied *-un-lft-identity3.7
Applied distribute-lft-out3.7
Simplified2.8
rmApplied distribute-rgt-in2.8
Applied associate-+r+0
Simplified0
Final simplification0
herbie shell --seed 2020046
(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))