x + \frac{y \cdot \left(z - x\right)}{t}\left(y \cdot \frac{\sqrt[3]{z - x} \cdot \sqrt[3]{z - x}}{\sqrt[3]{t} \cdot \sqrt[3]{t}}\right) \cdot \frac{\sqrt[3]{z - x}}{\sqrt[3]{t}} + xdouble f(double x, double y, double z, double t) {
double r281813 = x;
double r281814 = y;
double r281815 = z;
double r281816 = r281815 - r281813;
double r281817 = r281814 * r281816;
double r281818 = t;
double r281819 = r281817 / r281818;
double r281820 = r281813 + r281819;
return r281820;
}
double f(double x, double y, double z, double t) {
double r281821 = y;
double r281822 = z;
double r281823 = x;
double r281824 = r281822 - r281823;
double r281825 = cbrt(r281824);
double r281826 = r281825 * r281825;
double r281827 = t;
double r281828 = cbrt(r281827);
double r281829 = r281828 * r281828;
double r281830 = r281826 / r281829;
double r281831 = r281821 * r281830;
double r281832 = r281825 / r281828;
double r281833 = r281831 * r281832;
double r281834 = r281833 + r281823;
return r281834;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 2.0 |
| Herbie | 1.6 |
Initial program 6.7
Simplified2.0
rmApplied fma-udef2.0
Simplified6.7
rmApplied add-cube-cbrt7.1
Applied add-cube-cbrt7.2
Applied times-frac7.2
Applied associate-*r*1.6
Final simplification1.6
herbie shell --seed 2019209 +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)))