\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\frac{x}{y} + \mathsf{fma}\left(2, \frac{1}{t} \cdot \frac{1}{z}, 2 \cdot \frac{1}{t} - 2\right)double f(double x, double y, double z, double t) {
double r759140 = x;
double r759141 = y;
double r759142 = r759140 / r759141;
double r759143 = 2.0;
double r759144 = z;
double r759145 = r759144 * r759143;
double r759146 = 1.0;
double r759147 = t;
double r759148 = r759146 - r759147;
double r759149 = r759145 * r759148;
double r759150 = r759143 + r759149;
double r759151 = r759147 * r759144;
double r759152 = r759150 / r759151;
double r759153 = r759142 + r759152;
return r759153;
}
double f(double x, double y, double z, double t) {
double r759154 = x;
double r759155 = y;
double r759156 = r759154 / r759155;
double r759157 = 2.0;
double r759158 = 1.0;
double r759159 = t;
double r759160 = r759158 / r759159;
double r759161 = z;
double r759162 = r759158 / r759161;
double r759163 = r759160 * r759162;
double r759164 = r759157 * r759160;
double r759165 = r759164 - r759157;
double r759166 = fma(r759157, r759163, r759165);
double r759167 = r759156 + r759166;
return r759167;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.3 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.3
Taylor expanded around 0 0.1
Simplified0.1
rmApplied add-cube-cbrt0.1
Applied times-frac0.1
Simplified0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020033 +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))))