x + \frac{y \cdot \left(z - x\right)}{t}\frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \left(\frac{\sqrt[3]{y}}{\sqrt[3]{t}} \cdot z\right) + \mathsf{fma}\left(-x, \frac{y}{t}, x\right)double f(double x, double y, double z, double t) {
double r279485 = x;
double r279486 = y;
double r279487 = z;
double r279488 = r279487 - r279485;
double r279489 = r279486 * r279488;
double r279490 = t;
double r279491 = r279489 / r279490;
double r279492 = r279485 + r279491;
return r279492;
}
double f(double x, double y, double z, double t) {
double r279493 = y;
double r279494 = cbrt(r279493);
double r279495 = r279494 * r279494;
double r279496 = t;
double r279497 = cbrt(r279496);
double r279498 = r279497 * r279497;
double r279499 = r279495 / r279498;
double r279500 = r279494 / r279497;
double r279501 = z;
double r279502 = r279500 * r279501;
double r279503 = r279499 * r279502;
double r279504 = x;
double r279505 = -r279504;
double r279506 = r279493 / r279496;
double r279507 = fma(r279505, r279506, r279504);
double r279508 = r279503 + r279507;
return r279508;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.1 |
|---|---|
| Target | 2.2 |
| Herbie | 2.0 |
Initial program 6.1
Simplified2.2
rmApplied fma-udef2.2
rmApplied sub-neg2.2
Applied distribute-lft-in2.2
Applied associate-+l+2.2
Simplified2.2
rmApplied add-cube-cbrt2.5
Applied add-cube-cbrt2.6
Applied times-frac2.6
Applied associate-*l*2.0
Final simplification2.0
herbie shell --seed 2020089 +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)))