\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\mathsf{fma}\left(\frac{\frac{\mathsf{fma}\left(1, z, 1\right)}{z}}{t} - 1, 2, \frac{x}{y}\right)double f(double x, double y, double z, double t) {
double r35814901 = x;
double r35814902 = y;
double r35814903 = r35814901 / r35814902;
double r35814904 = 2.0;
double r35814905 = z;
double r35814906 = r35814905 * r35814904;
double r35814907 = 1.0;
double r35814908 = t;
double r35814909 = r35814907 - r35814908;
double r35814910 = r35814906 * r35814909;
double r35814911 = r35814904 + r35814910;
double r35814912 = r35814908 * r35814905;
double r35814913 = r35814911 / r35814912;
double r35814914 = r35814903 + r35814913;
return r35814914;
}
double f(double x, double y, double z, double t) {
double r35814915 = 1.0;
double r35814916 = z;
double r35814917 = 1.0;
double r35814918 = fma(r35814915, r35814916, r35814917);
double r35814919 = r35814918 / r35814916;
double r35814920 = t;
double r35814921 = r35814919 / r35814920;
double r35814922 = r35814921 - r35814917;
double r35814923 = 2.0;
double r35814924 = x;
double r35814925 = y;
double r35814926 = r35814924 / r35814925;
double r35814927 = fma(r35814922, r35814923, r35814926);
return r35814927;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.1
Simplified0.1
rmApplied *-un-lft-identity0.1
Applied times-frac0.1
rmApplied associate-*l/0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t)
:name "Data.HashTable.ST.Basic:computeOverhead from hashtables-1.2.0.2"
:herbie-target
(- (/ (+ (/ 2.0 z) 2.0) t) (- 2.0 (/ x y)))
(+ (/ x y) (/ (+ 2.0 (* (* z 2.0) (- 1.0 t))) (* t z))))