x + \frac{y \cdot \left(z - x\right)}{t}\left(\left(z - x\right) \cdot \frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{y}}{\sqrt[3]{t}} + xdouble f(double x, double y, double z, double t) {
double r215523 = x;
double r215524 = y;
double r215525 = z;
double r215526 = r215525 - r215523;
double r215527 = r215524 * r215526;
double r215528 = t;
double r215529 = r215527 / r215528;
double r215530 = r215523 + r215529;
return r215530;
}
double f(double x, double y, double z, double t) {
double r215531 = z;
double r215532 = x;
double r215533 = r215531 - r215532;
double r215534 = y;
double r215535 = cbrt(r215534);
double r215536 = r215535 * r215535;
double r215537 = t;
double r215538 = cbrt(r215537);
double r215539 = r215538 * r215538;
double r215540 = r215536 / r215539;
double r215541 = r215533 * r215540;
double r215542 = r215535 / r215538;
double r215543 = r215541 * r215542;
double r215544 = r215543 + r215532;
return r215544;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.4 |
|---|---|
| Target | 2.2 |
| Herbie | 1.0 |
Initial program 6.4
Simplified2.2
rmApplied fma-udef2.2
Simplified2.2
rmApplied add-cube-cbrt2.7
Applied add-cube-cbrt2.8
Applied times-frac2.8
Applied associate-*r*1.0
Final simplification1.0
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z t)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"
:precision binary64
:herbie-target
(- x (+ (* x (/ y t)) (* (- z) (/ y t))))
(+ x (/ (* y (- z x)) t)))