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 r577605 = x;
double r577606 = y;
double r577607 = z;
double r577608 = t;
double r577609 = r577607 - r577608;
double r577610 = r577606 * r577609;
double r577611 = a;
double r577612 = r577611 - r577608;
double r577613 = r577610 / r577612;
double r577614 = r577605 + r577613;
return r577614;
}
double f(double x, double y, double z, double t, double a) {
double r577615 = z;
double r577616 = a;
double r577617 = t;
double r577618 = r577616 - r577617;
double r577619 = r577615 / r577618;
double r577620 = r577617 / r577618;
double r577621 = r577619 - r577620;
double r577622 = y;
double r577623 = r577621 * r577622;
double r577624 = x;
double r577625 = r577623 + r577624;
return r577625;
}




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))))