x + y \cdot \frac{z - t}{a - t}\mathsf{fma}\left(\frac{z - t}{a - t}, y, x\right)double f(double x, double y, double z, double t, double a) {
double r434765 = x;
double r434766 = y;
double r434767 = z;
double r434768 = t;
double r434769 = r434767 - r434768;
double r434770 = a;
double r434771 = r434770 - r434768;
double r434772 = r434769 / r434771;
double r434773 = r434766 * r434772;
double r434774 = r434765 + r434773;
return r434774;
}
double f(double x, double y, double z, double t, double a) {
double r434775 = z;
double r434776 = t;
double r434777 = r434775 - r434776;
double r434778 = a;
double r434779 = r434778 - r434776;
double r434780 = r434777 / r434779;
double r434781 = y;
double r434782 = x;
double r434783 = fma(r434780, r434781, r434782);
return r434783;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 1.4 |
|---|---|
| Target | 0.5 |
| Herbie | 1.4 |
Initial program 1.4
Simplified1.4
Final simplification1.4
herbie shell --seed 2019235 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< y -8.50808486055124107e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.8944268627920891e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))