\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\mathsf{fma}\left(x, \frac{1}{y}, \mathsf{fma}\left(2, \frac{1}{t \cdot z}, 2 \cdot \frac{1}{t} - 2\right)\right)double f(double x, double y, double z, double t) {
double r822023 = x;
double r822024 = y;
double r822025 = r822023 / r822024;
double r822026 = 2.0;
double r822027 = z;
double r822028 = r822027 * r822026;
double r822029 = 1.0;
double r822030 = t;
double r822031 = r822029 - r822030;
double r822032 = r822028 * r822031;
double r822033 = r822026 + r822032;
double r822034 = r822030 * r822027;
double r822035 = r822033 / r822034;
double r822036 = r822025 + r822035;
return r822036;
}
double f(double x, double y, double z, double t) {
double r822037 = x;
double r822038 = 1.0;
double r822039 = y;
double r822040 = r822038 / r822039;
double r822041 = 2.0;
double r822042 = t;
double r822043 = z;
double r822044 = r822042 * r822043;
double r822045 = r822038 / r822044;
double r822046 = r822038 / r822042;
double r822047 = r822041 * r822046;
double r822048 = r822047 - r822041;
double r822049 = fma(r822041, r822045, r822048);
double r822050 = fma(r822037, r822040, r822049);
return r822050;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.4 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.4
Taylor expanded around 0 0.1
Simplified0.1
rmApplied div-inv0.1
Applied fma-def0.1
Final simplification0.1
herbie shell --seed 2020046 +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))))