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 r24753519 = x;
double r24753520 = y;
double r24753521 = z;
double r24753522 = t;
double r24753523 = r24753521 - r24753522;
double r24753524 = r24753520 * r24753523;
double r24753525 = a;
double r24753526 = r24753525 - r24753522;
double r24753527 = r24753524 / r24753526;
double r24753528 = r24753519 + r24753527;
return r24753528;
}
double f(double x, double y, double z, double t, double a) {
double r24753529 = z;
double r24753530 = t;
double r24753531 = r24753529 - r24753530;
double r24753532 = a;
double r24753533 = r24753532 - r24753530;
double r24753534 = r24753531 / r24753533;
double r24753535 = y;
double r24753536 = r24753534 * r24753535;
double r24753537 = x;
double r24753538 = r24753536 + r24753537;
return r24753538;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.4 |
|---|---|
| Target | 1.3 |
| Herbie | 1.5 |
Initial program 10.4
Simplified3.2
rmApplied clear-num3.4
rmApplied add-cube-cbrt3.9
rmApplied fma-udef3.9
Simplified3.3
rmApplied associate-/r/1.5
Final simplification1.5
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, B"
:herbie-target
(+ x (/ y (/ (- a t) (- z t))))
(+ x (/ (* y (- z t)) (- a t))))