double f(double a, double b, double c, double d) {
double r5121769 = a;
double r5121770 = b;
double r5121771 = c;
double r5121772 = d;
double r5121773 = r5121771 + r5121772;
double r5121774 = r5121770 + r5121773;
double r5121775 = r5121769 + r5121774;
double r5121776 = 2.0;
double r5121777 = r5121775 * r5121776;
return r5121777;
}
double f(double a, double b, double c, double d) {
double r5121778 = a;
double r5121779 = c;
double r5121780 = r5121778 + r5121779;
double r5121781 = b;
double r5121782 = d;
double r5121783 = r5121781 + r5121782;
double r5121784 = r5121780 + r5121783;
double r5121785 = exp(r5121784);
double r5121786 = log(r5121785);
double r5121787 = cbrt(r5121786);
double r5121788 = r5121781 + r5121779;
double r5121789 = r5121788 + r5121778;
double r5121790 = r5121782 + r5121789;
double r5121791 = cbrt(r5121790);
double r5121792 = r5121787 * r5121791;
double r5121793 = r5121792 * r5121791;
double r5121794 = 2.0;
double r5121795 = r5121793 * r5121794;
return r5121795;
}
\left(a + \left(b + \left(c + d\right)\right)\right) \cdot 2
\left(\left(\sqrt[3]{\log \left(e^{\left(a + c\right) + \left(b + d\right)}\right)} \cdot \sqrt[3]{d + \left(\left(b + c\right) + a\right)}\right) \cdot \sqrt[3]{d + \left(\left(b + c\right) + a\right)}\right) \cdot 2



Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
| Original | 3.7 |
|---|---|
| Target | 3.9 |
| Herbie | 2.8 |
Initial program 3.7
rmApplied associate-+r+2.8
rmApplied associate-+r+2.8
rmApplied add-cube-cbrt3.1
rmApplied add-log-exp3.1
Applied add-log-exp3.1
Applied add-log-exp3.1
Applied sum-log3.0
Applied add-log-exp3.0
Applied sum-log2.9
Applied sum-log2.7
Simplified2.8
Final simplification2.8
herbie shell --seed 2019102 +o rules:numerics
(FPCore (a b c d)
:name "Expression, p6"
: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))