x + \frac{y \cdot \left(z - t\right)}{a - t}\left(\frac{z}{a - t} - \frac{t}{a - t}\right) \cdot y + xdouble f(double x, double y, double z, double t, double a) {
double r511577 = x;
double r511578 = y;
double r511579 = z;
double r511580 = t;
double r511581 = r511579 - r511580;
double r511582 = r511578 * r511581;
double r511583 = a;
double r511584 = r511583 - r511580;
double r511585 = r511582 / r511584;
double r511586 = r511577 + r511585;
return r511586;
}
double f(double x, double y, double z, double t, double a) {
double r511587 = z;
double r511588 = a;
double r511589 = t;
double r511590 = r511588 - r511589;
double r511591 = r511587 / r511590;
double r511592 = r511589 / r511590;
double r511593 = r511591 - r511592;
double r511594 = y;
double r511595 = r511593 * r511594;
double r511596 = x;
double r511597 = r511595 + r511596;
return r511597;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.9 |
|---|---|
| Target | 1.1 |
| Herbie | 1.2 |
Initial program 10.9
Simplified2.7
rmApplied clear-num2.9
rmApplied fma-udef2.9
Simplified2.8
rmApplied associate-/r/1.2
rmApplied div-sub1.2
Final simplification1.2
herbie shell --seed 2020001 +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))))