x + y \cdot \frac{z - t}{z - a}x + \left(y \cdot \frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{\sqrt[3]{\frac{z - a}{z - t}} \cdot \sqrt[3]{\frac{z - a}{z - t}}}\right) \cdot \frac{\sqrt[3]{1}}{\sqrt[3]{\frac{z - a}{z - t}}}double f(double x, double y, double z, double t, double a) {
double r732836 = x;
double r732837 = y;
double r732838 = z;
double r732839 = t;
double r732840 = r732838 - r732839;
double r732841 = a;
double r732842 = r732838 - r732841;
double r732843 = r732840 / r732842;
double r732844 = r732837 * r732843;
double r732845 = r732836 + r732844;
return r732845;
}
double f(double x, double y, double z, double t, double a) {
double r732846 = x;
double r732847 = y;
double r732848 = 1.0;
double r732849 = cbrt(r732848);
double r732850 = r732849 * r732849;
double r732851 = z;
double r732852 = a;
double r732853 = r732851 - r732852;
double r732854 = t;
double r732855 = r732851 - r732854;
double r732856 = r732853 / r732855;
double r732857 = cbrt(r732856);
double r732858 = r732857 * r732857;
double r732859 = r732850 / r732858;
double r732860 = r732847 * r732859;
double r732861 = r732849 / r732857;
double r732862 = r732860 * r732861;
double r732863 = r732846 + r732862;
return r732863;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.2 |
|---|---|
| Target | 1.1 |
| Herbie | 1.4 |
Initial program 1.2
rmApplied clear-num1.2
rmApplied add-cube-cbrt1.5
Applied add-cube-cbrt1.5
Applied times-frac1.5
Applied associate-*r*1.4
Final simplification1.4
herbie shell --seed 2020020 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (* y (/ (- z t) (- z a)))))