x + \frac{y \cdot \left(z - t\right)}{a - t}\left(\frac{z}{a - t} - \frac{t}{a - t}\right) \cdot y + xdouble f(double x, double y, double z, double t, double a) {
double r560719 = x;
double r560720 = y;
double r560721 = z;
double r560722 = t;
double r560723 = r560721 - r560722;
double r560724 = r560720 * r560723;
double r560725 = a;
double r560726 = r560725 - r560722;
double r560727 = r560724 / r560726;
double r560728 = r560719 + r560727;
return r560728;
}
double f(double x, double y, double z, double t, double a) {
double r560729 = z;
double r560730 = a;
double r560731 = t;
double r560732 = r560730 - r560731;
double r560733 = r560729 / r560732;
double r560734 = r560731 / r560732;
double r560735 = r560733 - r560734;
double r560736 = y;
double r560737 = r560735 * r560736;
double r560738 = x;
double r560739 = r560737 + r560738;
return r560739;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.9 |
|---|---|
| Target | 1.1 |
| Herbie | 1.2 |
Initial program 10.9
Simplified2.7
rmApplied clear-num2.9
rmApplied fma-udef2.9
Simplified2.8
rmApplied associate-/r/1.2
rmApplied div-sub1.2
Final simplification1.2
herbie shell --seed 2020001 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(+ x (/ y (/ (- a t) (- z t))))
(+ x (/ (* y (- z t)) (- a t))))