\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{\frac{1}{z}}{t}, 2 \cdot \frac{1}{t} - 2\right)double f(double x, double y, double z, double t) {
double r837076 = x;
double r837077 = y;
double r837078 = r837076 / r837077;
double r837079 = 2.0;
double r837080 = z;
double r837081 = r837080 * r837079;
double r837082 = 1.0;
double r837083 = t;
double r837084 = r837082 - r837083;
double r837085 = r837081 * r837084;
double r837086 = r837079 + r837085;
double r837087 = r837083 * r837080;
double r837088 = r837086 / r837087;
double r837089 = r837078 + r837088;
return r837089;
}
double f(double x, double y, double z, double t) {
double r837090 = x;
double r837091 = y;
double r837092 = r837090 / r837091;
double r837093 = 2.0;
double r837094 = 1.0;
double r837095 = z;
double r837096 = r837094 / r837095;
double r837097 = t;
double r837098 = r837096 / r837097;
double r837099 = r837094 / r837097;
double r837100 = r837093 * r837099;
double r837101 = r837100 - r837093;
double r837102 = fma(r837093, r837098, r837101);
double r837103 = r837092 + r837102;
return r837103;
}




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
rmApplied associate-*l/0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020064 +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))))