\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 z}, 2 \cdot \frac{1}{t} - 2\right)double f(double x, double y, double z, double t) {
double r980795 = x;
double r980796 = y;
double r980797 = r980795 / r980796;
double r980798 = 2.0;
double r980799 = z;
double r980800 = r980799 * r980798;
double r980801 = 1.0;
double r980802 = t;
double r980803 = r980801 - r980802;
double r980804 = r980800 * r980803;
double r980805 = r980798 + r980804;
double r980806 = r980802 * r980799;
double r980807 = r980805 / r980806;
double r980808 = r980797 + r980807;
return r980808;
}
double f(double x, double y, double z, double t) {
double r980809 = x;
double r980810 = y;
double r980811 = r980809 / r980810;
double r980812 = 2.0;
double r980813 = 1.0;
double r980814 = t;
double r980815 = z;
double r980816 = r980814 * r980815;
double r980817 = r980813 / r980816;
double r980818 = r980813 / r980814;
double r980819 = r980812 * r980818;
double r980820 = r980819 - r980812;
double r980821 = fma(r980812, r980817, r980820);
double r980822 = r980811 + r980821;
return r980822;
}




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
Taylor expanded around 0 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019362 +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))))