\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\mathsf{fma}\left(\mathsf{fma}\left(2, 1, \frac{2}{z}\right), \frac{1}{t}, \frac{x}{y} - 2\right)double f(double x, double y, double z, double t) {
double r451895 = x;
double r451896 = y;
double r451897 = r451895 / r451896;
double r451898 = 2.0;
double r451899 = z;
double r451900 = r451899 * r451898;
double r451901 = 1.0;
double r451902 = t;
double r451903 = r451901 - r451902;
double r451904 = r451900 * r451903;
double r451905 = r451898 + r451904;
double r451906 = r451902 * r451899;
double r451907 = r451905 / r451906;
double r451908 = r451897 + r451907;
return r451908;
}
double f(double x, double y, double z, double t) {
double r451909 = 2.0;
double r451910 = 1.0;
double r451911 = z;
double r451912 = r451909 / r451911;
double r451913 = fma(r451909, r451910, r451912);
double r451914 = 1.0;
double r451915 = t;
double r451916 = r451914 / r451915;
double r451917 = x;
double r451918 = y;
double r451919 = r451917 / r451918;
double r451920 = r451919 - r451909;
double r451921 = fma(r451913, r451916, r451920);
return r451921;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 8.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 8.8
Simplified0.1
rmApplied div-inv0.1
Applied fma-def0.1
Final simplification0.1
herbie shell --seed 2019304 +o rules:numerics
(FPCore (x y z t)
:name "Data.HashTable.ST.Basic:computeOverhead from hashtables-1.2.0.2"
:precision binary64
:herbie-target
(- (/ (+ (/ 2 z) 2) t) (- 2 (/ x y)))
(+ (/ x y) (/ (+ 2 (* (* z 2) (- 1 t))) (* t z))))