x + y \cdot \frac{z - t}{a - t}\mathsf{fma}\left(y, \frac{z}{a - t} - \frac{1}{\frac{a - t}{t}}, x\right)double f(double x, double y, double z, double t, double a) {
double r507804 = x;
double r507805 = y;
double r507806 = z;
double r507807 = t;
double r507808 = r507806 - r507807;
double r507809 = a;
double r507810 = r507809 - r507807;
double r507811 = r507808 / r507810;
double r507812 = r507805 * r507811;
double r507813 = r507804 + r507812;
return r507813;
}
double f(double x, double y, double z, double t, double a) {
double r507814 = y;
double r507815 = z;
double r507816 = a;
double r507817 = t;
double r507818 = r507816 - r507817;
double r507819 = r507815 / r507818;
double r507820 = 1.0;
double r507821 = r507818 / r507817;
double r507822 = r507820 / r507821;
double r507823 = r507819 - r507822;
double r507824 = x;
double r507825 = fma(r507814, r507823, r507824);
return r507825;
}




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.4 |
| Herbie | 1.4 |
Initial program 1.4
Simplified1.4
rmApplied div-sub1.4
rmApplied clear-num1.4
Final simplification1.4
herbie shell --seed 2020024 +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.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))