x + \frac{y \cdot \left(z - t\right)}{a - t}\frac{z - t}{a - t} \cdot y + xdouble f(double x, double y, double z, double t, double a) {
double r624468 = x;
double r624469 = y;
double r624470 = z;
double r624471 = t;
double r624472 = r624470 - r624471;
double r624473 = r624469 * r624472;
double r624474 = a;
double r624475 = r624474 - r624471;
double r624476 = r624473 / r624475;
double r624477 = r624468 + r624476;
return r624477;
}
double f(double x, double y, double z, double t, double a) {
double r624478 = z;
double r624479 = t;
double r624480 = r624478 - r624479;
double r624481 = a;
double r624482 = r624481 - r624479;
double r624483 = r624480 / r624482;
double r624484 = y;
double r624485 = r624483 * r624484;
double r624486 = x;
double r624487 = r624485 + r624486;
return r624487;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 11.2 |
|---|---|
| Target | 1.3 |
| Herbie | 1.4 |
Initial program 11.2
Simplified3.0
rmApplied clear-num3.2
rmApplied fma-udef3.2
Simplified3.1
rmApplied associate-/r/1.4
Final simplification1.4
herbie shell --seed 2020021 +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))))