x + \frac{\left(y - x\right) \cdot z}{t}\mathsf{fma}\left(1, \mathsf{fma}\left(\frac{z}{t}, y, x\right), \left(\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \frac{-1}{\frac{t}{z}}\right) \cdot \sqrt[3]{x}\right) + \mathsf{fma}\left(\frac{-1}{\frac{t}{z}}, x, \frac{1}{\frac{t}{z}} \cdot x\right)double f(double x, double y, double z, double t) {
double r22527739 = x;
double r22527740 = y;
double r22527741 = r22527740 - r22527739;
double r22527742 = z;
double r22527743 = r22527741 * r22527742;
double r22527744 = t;
double r22527745 = r22527743 / r22527744;
double r22527746 = r22527739 + r22527745;
return r22527746;
}
double f(double x, double y, double z, double t) {
double r22527747 = 1.0;
double r22527748 = z;
double r22527749 = t;
double r22527750 = r22527748 / r22527749;
double r22527751 = y;
double r22527752 = x;
double r22527753 = fma(r22527750, r22527751, r22527752);
double r22527754 = cbrt(r22527752);
double r22527755 = r22527754 * r22527754;
double r22527756 = -1.0;
double r22527757 = r22527749 / r22527748;
double r22527758 = r22527756 / r22527757;
double r22527759 = r22527755 * r22527758;
double r22527760 = r22527759 * r22527754;
double r22527761 = fma(r22527747, r22527753, r22527760);
double r22527762 = r22527747 / r22527757;
double r22527763 = r22527762 * r22527752;
double r22527764 = fma(r22527758, r22527752, r22527763);
double r22527765 = r22527761 + r22527764;
return r22527765;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.7 |
|---|---|
| Target | 2.0 |
| Herbie | 2.2 |
Initial program 6.7
Simplified6.4
Taylor expanded around 0 6.7
Simplified2.0
rmApplied div-inv2.0
Applied *-un-lft-identity2.0
Applied prod-diff2.0
rmApplied add-cube-cbrt2.2
Applied associate-*r*2.2
Final simplification2.2
herbie shell --seed 2019165 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Histogram:binBounds from Chart-1.5.3"
:herbie-target
(if (< x -9.025511195533005e-135) (- x (* (/ z t) (- x y))) (if (< x 4.275032163700715e-250) (+ x (* (/ (- y x) t) z)) (+ x (/ (- y x) (/ t z)))))
(+ x (/ (* (- y x) z) t)))