x + \frac{\left(y - z\right) \cdot t}{a - z}\mathsf{fma}\left(\mathsf{fma}\left(y, \frac{1}{a - z}, \frac{-z}{a - z}\right), t, x\right)double f(double x, double y, double z, double t, double a) {
double r394157 = x;
double r394158 = y;
double r394159 = z;
double r394160 = r394158 - r394159;
double r394161 = t;
double r394162 = r394160 * r394161;
double r394163 = a;
double r394164 = r394163 - r394159;
double r394165 = r394162 / r394164;
double r394166 = r394157 + r394165;
return r394166;
}
double f(double x, double y, double z, double t, double a) {
double r394167 = y;
double r394168 = 1.0;
double r394169 = a;
double r394170 = z;
double r394171 = r394169 - r394170;
double r394172 = r394168 / r394171;
double r394173 = -r394170;
double r394174 = r394173 / r394171;
double r394175 = fma(r394167, r394172, r394174);
double r394176 = t;
double r394177 = x;
double r394178 = fma(r394175, r394176, r394177);
return r394178;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.9 |
|---|---|
| Target | 0.5 |
| Herbie | 1.3 |
Initial program 10.9
Simplified1.2
rmApplied div-sub1.2
rmApplied div-inv1.3
Applied fma-neg1.3
Simplified1.3
Final simplification1.3
herbie shell --seed 2019304 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTick from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(if (< t -1.0682974490174067e-39) (+ x (* (/ (- y z) (- a z)) t)) (if (< t 3.9110949887586375e-141) (+ x (/ (* (- y z) t) (- a z))) (+ x (* (/ (- y z) (- a z)) t))))
(+ x (/ (* (- y z) t) (- a z))))