x + y \cdot \frac{z - t}{z - a}\frac{y}{\frac{z - a}{z - t}} + xdouble f(double x, double y, double z, double t, double a) {
double r699373 = x;
double r699374 = y;
double r699375 = z;
double r699376 = t;
double r699377 = r699375 - r699376;
double r699378 = a;
double r699379 = r699375 - r699378;
double r699380 = r699377 / r699379;
double r699381 = r699374 * r699380;
double r699382 = r699373 + r699381;
return r699382;
}
double f(double x, double y, double z, double t, double a) {
double r699383 = y;
double r699384 = z;
double r699385 = a;
double r699386 = r699384 - r699385;
double r699387 = t;
double r699388 = r699384 - r699387;
double r699389 = r699386 / r699388;
double r699390 = r699383 / r699389;
double r699391 = x;
double r699392 = r699390 + r699391;
return r699392;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.5 |
|---|---|
| Target | 1.4 |
| Herbie | 1.4 |
Initial program 1.5
Simplified1.5
rmApplied add-cube-cbrt1.8
rmApplied fma-udef1.8
Simplified10.7
rmApplied associate-/l*1.4
Final simplification1.4
herbie shell --seed 2020083 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (* y (/ (- z t) (- z a)))))