x + \frac{y \cdot \left(z - t\right)}{a - t}\frac{\frac{z - t}{a - t}}{\frac{1}{y}} + xdouble f(double x, double y, double z, double t, double a) {
double r669393 = x;
double r669394 = y;
double r669395 = z;
double r669396 = t;
double r669397 = r669395 - r669396;
double r669398 = r669394 * r669397;
double r669399 = a;
double r669400 = r669399 - r669396;
double r669401 = r669398 / r669400;
double r669402 = r669393 + r669401;
return r669402;
}
double f(double x, double y, double z, double t, double a) {
double r669403 = z;
double r669404 = t;
double r669405 = r669403 - r669404;
double r669406 = a;
double r669407 = r669406 - r669404;
double r669408 = r669405 / r669407;
double r669409 = 1.0;
double r669410 = y;
double r669411 = r669409 / r669410;
double r669412 = r669408 / r669411;
double r669413 = x;
double r669414 = r669412 + r669413;
return r669414;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 11.1 |
|---|---|
| Target | 1.3 |
| Herbie | 1.5 |
Initial program 11.1
Simplified3.1
rmApplied clear-num3.4
rmApplied fma-udef3.4
Simplified3.2
rmApplied div-inv3.2
Applied associate-/r*1.5
Final simplification1.5
herbie shell --seed 2020083 +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))))