\left(a + \left(b + \left(c + d\right)\right)\right) \cdot 2
\sqrt[3]{{\left(\sqrt[3]{{\left(\sqrt[3]{{\left(a + \left(d + \left(b + c\right)\right)\right)}^{3}}\right)}^{3}}\right)}^{3}} \cdot 2double f(double a, double b, double c, double d) {
double r125073 = a;
double r125074 = b;
double r125075 = c;
double r125076 = d;
double r125077 = r125075 + r125076;
double r125078 = r125074 + r125077;
double r125079 = r125073 + r125078;
double r125080 = 2.0;
double r125081 = r125079 * r125080;
return r125081;
}
double f(double a, double b, double c, double d) {
double r125082 = a;
double r125083 = d;
double r125084 = b;
double r125085 = c;
double r125086 = r125084 + r125085;
double r125087 = r125083 + r125086;
double r125088 = r125082 + r125087;
double r125089 = 3.0;
double r125090 = pow(r125088, r125089);
double r125091 = cbrt(r125090);
double r125092 = pow(r125091, r125089);
double r125093 = cbrt(r125092);
double r125094 = pow(r125093, r125089);
double r125095 = cbrt(r125094);
double r125096 = 2.0;
double r125097 = r125095 * r125096;
return r125097;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 3.7 |
|---|---|
| Target | 3.8 |
| Herbie | 2.9 |
Initial program 3.7
rmApplied associate-+r+2.7
rmApplied add-cbrt-cube2.9
Simplified2.9
rmApplied add-cbrt-cube2.9
Simplified2.9
rmApplied add-cbrt-cube2.9
Simplified2.9
Final simplification2.9
herbie shell --seed 2019350 +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))