x + \frac{y \cdot \left(z - t\right)}{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 r372386 = x;
double r372387 = y;
double r372388 = z;
double r372389 = t;
double r372390 = r372388 - r372389;
double r372391 = r372387 * r372390;
double r372392 = a;
double r372393 = r372392 - r372389;
double r372394 = r372391 / r372393;
double r372395 = r372386 + r372394;
return r372395;
}
double f(double x, double y, double z, double t, double a) {
double r372396 = z;
double r372397 = t;
double r372398 = r372396 - r372397;
double r372399 = a;
double r372400 = r372399 - r372397;
double r372401 = r372398 / r372400;
double r372402 = y;
double r372403 = x;
double r372404 = fma(r372401, r372402, r372403);
return r372404;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.9 |
|---|---|
| Target | 1.2 |
| Herbie | 1.3 |
Initial program 10.9
Simplified2.9
rmApplied div-inv2.9
rmApplied add-cube-cbrt3.4
Applied associate-/r*3.4
rmApplied fma-udef3.4
Simplified1.3
rmApplied fma-def1.3
Final simplification1.3
herbie shell --seed 2019303 +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))))