x + \frac{y \cdot \left(z - t\right)}{a - t}\frac{z - t}{a - t} \cdot y + xdouble f(double x, double y, double z, double t, double a) {
double r23842708 = x;
double r23842709 = y;
double r23842710 = z;
double r23842711 = t;
double r23842712 = r23842710 - r23842711;
double r23842713 = r23842709 * r23842712;
double r23842714 = a;
double r23842715 = r23842714 - r23842711;
double r23842716 = r23842713 / r23842715;
double r23842717 = r23842708 + r23842716;
return r23842717;
}
double f(double x, double y, double z, double t, double a) {
double r23842718 = z;
double r23842719 = t;
double r23842720 = r23842718 - r23842719;
double r23842721 = a;
double r23842722 = r23842721 - r23842719;
double r23842723 = r23842720 / r23842722;
double r23842724 = y;
double r23842725 = r23842723 * r23842724;
double r23842726 = x;
double r23842727 = r23842725 + r23842726;
return r23842727;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.4 |
|---|---|
| Target | 1.3 |
| Herbie | 1.5 |
Initial program 10.4
Simplified3.2
rmApplied clear-num3.4
rmApplied add-cube-cbrt3.9
rmApplied fma-udef3.9
Simplified3.3
rmApplied associate-/r/1.5
Final simplification1.5
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, B"
:herbie-target
(+ x (/ y (/ (- a t) (- z t))))
(+ x (/ (* y (- z t)) (- a t))))