x + \frac{y \cdot \left(z - t\right)}{a}\mathsf{fma}\left(\frac{\sqrt[3]{z - t} \cdot \sqrt[3]{z - t}}{\frac{1}{\sqrt[3]{y} \cdot \sqrt[3]{y}}}, \frac{\sqrt[3]{z - t}}{\frac{a}{\sqrt[3]{y}}}, x\right)double f(double x, double y, double z, double t, double a) {
double r189394 = x;
double r189395 = y;
double r189396 = z;
double r189397 = t;
double r189398 = r189396 - r189397;
double r189399 = r189395 * r189398;
double r189400 = a;
double r189401 = r189399 / r189400;
double r189402 = r189394 + r189401;
return r189402;
}
double f(double x, double y, double z, double t, double a) {
double r189403 = z;
double r189404 = t;
double r189405 = r189403 - r189404;
double r189406 = cbrt(r189405);
double r189407 = r189406 * r189406;
double r189408 = 1.0;
double r189409 = y;
double r189410 = cbrt(r189409);
double r189411 = r189410 * r189410;
double r189412 = r189408 / r189411;
double r189413 = r189407 / r189412;
double r189414 = a;
double r189415 = r189414 / r189410;
double r189416 = r189406 / r189415;
double r189417 = x;
double r189418 = fma(r189413, r189416, r189417);
return r189418;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.4 |
|---|---|
| Target | 0.7 |
| Herbie | 1.9 |
Initial program 6.4
Simplified2.5
rmApplied fma-udef2.5
Simplified2.4
rmApplied add-cube-cbrt2.9
Applied *-un-lft-identity2.9
Applied times-frac2.9
Applied add-cube-cbrt3.0
Applied times-frac1.9
Applied fma-def1.9
Final simplification1.9
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"
:precision binary64
:herbie-target
(if (< y -1.0761266216389975e-10) (+ x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))
(+ x (/ (* y (- z t)) a)))