\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 r711476 = x;
double r711477 = y;
double r711478 = r711476 / r711477;
double r711479 = 2.0;
double r711480 = z;
double r711481 = r711480 * r711479;
double r711482 = 1.0;
double r711483 = t;
double r711484 = r711482 - r711483;
double r711485 = r711481 * r711484;
double r711486 = r711479 + r711485;
double r711487 = r711483 * r711480;
double r711488 = r711486 / r711487;
double r711489 = r711478 + r711488;
return r711489;
}
double f(double x, double y, double z, double t) {
double r711490 = x;
double r711491 = y;
double r711492 = r711490 / r711491;
double r711493 = 2.0;
double r711494 = 1.0;
double r711495 = t;
double r711496 = z;
double r711497 = r711495 * r711496;
double r711498 = r711494 / r711497;
double r711499 = r711494 / r711495;
double r711500 = r711493 * r711499;
double r711501 = r711500 - r711493;
double r711502 = fma(r711493, r711498, r711501);
double r711503 = r711492 + r711502;
return r711503;
}




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))))