x + y \cdot \frac{z - t}{a - t}\mathsf{fma}\left(\mathsf{fma}\left(z, \frac{1}{a - t}, \frac{-t}{a - t}\right), y, x\right)double f(double x, double y, double z, double t, double a) {
double r325974 = x;
double r325975 = y;
double r325976 = z;
double r325977 = t;
double r325978 = r325976 - r325977;
double r325979 = a;
double r325980 = r325979 - r325977;
double r325981 = r325978 / r325980;
double r325982 = r325975 * r325981;
double r325983 = r325974 + r325982;
return r325983;
}
double f(double x, double y, double z, double t, double a) {
double r325984 = z;
double r325985 = 1.0;
double r325986 = a;
double r325987 = t;
double r325988 = r325986 - r325987;
double r325989 = r325985 / r325988;
double r325990 = -r325987;
double r325991 = r325990 / r325988;
double r325992 = fma(r325984, r325989, r325991);
double r325993 = y;
double r325994 = x;
double r325995 = fma(r325992, r325993, r325994);
return r325995;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 1.6 |
|---|---|
| Target | 0.4 |
| Herbie | 1.6 |
Initial program 1.6
Simplified1.6
rmApplied div-sub1.6
rmApplied div-inv1.6
Applied fma-neg1.6
Simplified1.6
Final simplification1.6
herbie shell --seed 2019325 +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)))))