\left(a + \left(b + \left(c + d\right)\right)\right) \cdot 2
2 \cdot \left(\left(\sqrt[3]{\sqrt[3]{\left(\left(d + \left(\left(b + c\right) + a\right)\right) \cdot \left(a + \left(\left(b + c\right) + d\right)\right)\right) \cdot \left(a + \left(\left(b + c\right) + d\right)\right)}} \cdot \sqrt[3]{\sqrt[3]{\left(\left(d + \left(\left(b + c\right) + a\right)\right) \cdot \left(a + \left(\left(b + c\right) + d\right)\right)\right) \cdot \left(a + \left(\left(b + c\right) + d\right)\right)}}\right) \cdot \sqrt[3]{\sqrt[3]{\left(\left(d + \left(\left(b + c\right) + a\right)\right) \cdot \left(a + \left(\left(b + c\right) + d\right)\right)\right) \cdot \left(a + \left(\left(b + c\right) + d\right)\right)}}\right)double f(double a, double b, double c, double d) {
double r2810362 = a;
double r2810363 = b;
double r2810364 = c;
double r2810365 = d;
double r2810366 = r2810364 + r2810365;
double r2810367 = r2810363 + r2810366;
double r2810368 = r2810362 + r2810367;
double r2810369 = 2.0;
double r2810370 = r2810368 * r2810369;
return r2810370;
}
double f(double a, double b, double c, double d) {
double r2810371 = 2.0;
double r2810372 = d;
double r2810373 = b;
double r2810374 = c;
double r2810375 = r2810373 + r2810374;
double r2810376 = a;
double r2810377 = r2810375 + r2810376;
double r2810378 = r2810372 + r2810377;
double r2810379 = r2810375 + r2810372;
double r2810380 = r2810376 + r2810379;
double r2810381 = r2810378 * r2810380;
double r2810382 = r2810381 * r2810380;
double r2810383 = cbrt(r2810382);
double r2810384 = cbrt(r2810383);
double r2810385 = r2810384 * r2810384;
double r2810386 = r2810385 * r2810384;
double r2810387 = r2810371 * r2810386;
return r2810387;
}




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus d
Results
| Original | 3.7 |
|---|---|
| Target | 3.9 |
| Herbie | 2.9 |
Initial program 3.7
rmApplied associate-+r+2.8
rmApplied add-cbrt-cube2.9
rmApplied associate-+r+2.8
rmApplied add-cube-cbrt2.9
Final simplification2.9
herbie shell --seed 2019135 +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))