\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\frac{x}{y} + \left(\mathsf{fma}\left(2, \frac{1}{t \cdot z}, \frac{2}{t}\right) - 2\right)double f(double x, double y, double z, double t) {
double r851473 = x;
double r851474 = y;
double r851475 = r851473 / r851474;
double r851476 = 2.0;
double r851477 = z;
double r851478 = r851477 * r851476;
double r851479 = 1.0;
double r851480 = t;
double r851481 = r851479 - r851480;
double r851482 = r851478 * r851481;
double r851483 = r851476 + r851482;
double r851484 = r851480 * r851477;
double r851485 = r851483 / r851484;
double r851486 = r851475 + r851485;
return r851486;
}
double f(double x, double y, double z, double t) {
double r851487 = x;
double r851488 = y;
double r851489 = r851487 / r851488;
double r851490 = 2.0;
double r851491 = 1.0;
double r851492 = t;
double r851493 = z;
double r851494 = r851492 * r851493;
double r851495 = r851491 / r851494;
double r851496 = r851490 / r851492;
double r851497 = fma(r851490, r851495, r851496);
double r851498 = r851497 - r851490;
double r851499 = r851489 + r851498;
return r851499;
}




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
Final simplification0.1
herbie shell --seed 2020036 +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))))