\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}, \frac{2}{t \cdot z} + \left(\frac{2}{t} - 2\right)\right)double f(double x, double y, double z, double t) {
double r555449 = x;
double r555450 = y;
double r555451 = r555449 / r555450;
double r555452 = 2.0;
double r555453 = z;
double r555454 = r555453 * r555452;
double r555455 = 1.0;
double r555456 = t;
double r555457 = r555455 - r555456;
double r555458 = r555454 * r555457;
double r555459 = r555452 + r555458;
double r555460 = r555456 * r555453;
double r555461 = r555459 / r555460;
double r555462 = r555451 + r555461;
return r555462;
}
double f(double x, double y, double z, double t) {
double r555463 = x;
double r555464 = 1.0;
double r555465 = y;
double r555466 = r555464 / r555465;
double r555467 = 2.0;
double r555468 = t;
double r555469 = z;
double r555470 = r555468 * r555469;
double r555471 = r555467 / r555470;
double r555472 = r555467 / r555468;
double r555473 = r555472 - r555467;
double r555474 = r555471 + r555473;
double r555475 = fma(r555463, r555466, r555474);
return r555475;
}




Bits error versus x




Bits error versus y




Bits error versus z




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