\frac{x}{y} \cdot \left(z - t\right) + t\left(x \cdot \frac{\sqrt[3]{z - t} \cdot \sqrt[3]{z - t}}{\sqrt[3]{y} \cdot \sqrt[3]{y}}\right) \cdot \frac{\sqrt[3]{z - t}}{\sqrt[3]{y}} + tdouble f(double x, double y, double z, double t) {
double r409470 = x;
double r409471 = y;
double r409472 = r409470 / r409471;
double r409473 = z;
double r409474 = t;
double r409475 = r409473 - r409474;
double r409476 = r409472 * r409475;
double r409477 = r409476 + r409474;
return r409477;
}
double f(double x, double y, double z, double t) {
double r409478 = x;
double r409479 = z;
double r409480 = t;
double r409481 = r409479 - r409480;
double r409482 = cbrt(r409481);
double r409483 = r409482 * r409482;
double r409484 = y;
double r409485 = cbrt(r409484);
double r409486 = r409485 * r409485;
double r409487 = r409483 / r409486;
double r409488 = r409478 * r409487;
double r409489 = r409482 / r409485;
double r409490 = r409488 * r409489;
double r409491 = r409490 + r409480;
return r409491;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.1 |
|---|---|
| Target | 2.3 |
| Herbie | 1.6 |
Initial program 2.1
rmApplied div-inv2.1
Applied associate-*l*6.6
Simplified6.5
rmApplied add-cube-cbrt7.0
Applied add-cube-cbrt7.1
Applied times-frac7.1
Applied associate-*r*1.6
Final simplification1.6
herbie shell --seed 2020024 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Signal.Multichannel:$cget from hsignal-0.2.7.1"
:precision binary64
:herbie-target
(if (< z 2.759456554562692e-282) (+ (* (/ x y) (- z t)) t) (if (< z 2.326994450874436e-110) (+ (* x (/ (- z t) y)) t) (+ (* (/ x y) (- z t)) t)))
(+ (* (/ x y) (- z t)) t))