x + y \cdot \frac{z - t}{z - a}x + y \cdot \left(\frac{1}{\frac{z - a}{z}} - \frac{t}{z - a}\right)double f(double x, double y, double z, double t, double a) {
double r601835 = x;
double r601836 = y;
double r601837 = z;
double r601838 = t;
double r601839 = r601837 - r601838;
double r601840 = a;
double r601841 = r601837 - r601840;
double r601842 = r601839 / r601841;
double r601843 = r601836 * r601842;
double r601844 = r601835 + r601843;
return r601844;
}
double f(double x, double y, double z, double t, double a) {
double r601845 = x;
double r601846 = y;
double r601847 = 1.0;
double r601848 = z;
double r601849 = a;
double r601850 = r601848 - r601849;
double r601851 = r601850 / r601848;
double r601852 = r601847 / r601851;
double r601853 = t;
double r601854 = r601853 / r601850;
double r601855 = r601852 - r601854;
double r601856 = r601846 * r601855;
double r601857 = r601845 + r601856;
return r601857;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.3 |
|---|---|
| Target | 1.1 |
| Herbie | 1.3 |
Initial program 1.3
rmApplied div-sub1.3
rmApplied clear-num1.3
Final simplification1.3
herbie shell --seed 2020056 +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)))))