\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 r736503 = x;
double r736504 = y;
double r736505 = r736503 / r736504;
double r736506 = 2.0;
double r736507 = z;
double r736508 = r736507 * r736506;
double r736509 = 1.0;
double r736510 = t;
double r736511 = r736509 - r736510;
double r736512 = r736508 * r736511;
double r736513 = r736506 + r736512;
double r736514 = r736510 * r736507;
double r736515 = r736513 / r736514;
double r736516 = r736505 + r736515;
return r736516;
}
double f(double x, double y, double z, double t) {
double r736517 = x;
double r736518 = y;
double r736519 = r736517 / r736518;
double r736520 = 2.0;
double r736521 = 1.0;
double r736522 = t;
double r736523 = z;
double r736524 = r736522 * r736523;
double r736525 = r736521 / r736524;
double r736526 = r736521 / r736522;
double r736527 = r736520 * r736526;
double r736528 = r736527 - r736520;
double r736529 = fma(r736520, r736525, r736528);
double r736530 = r736519 + r736529;
return r736530;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.2 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.2
Taylor expanded around 0 0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020001 +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))))