\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, 1, 2\right) + \left(\frac{2}{t \cdot z} + \left(\frac{2}{t} - 2\right)\right)\right)double f(double x, double y, double z, double t) {
double r843343 = x;
double r843344 = y;
double r843345 = r843343 / r843344;
double r843346 = 2.0;
double r843347 = z;
double r843348 = r843347 * r843346;
double r843349 = 1.0;
double r843350 = t;
double r843351 = r843349 - r843350;
double r843352 = r843348 * r843351;
double r843353 = r843346 + r843352;
double r843354 = r843350 * r843347;
double r843355 = r843353 / r843354;
double r843356 = r843345 + r843355;
return r843356;
}
double f(double x, double y, double z, double t) {
double r843357 = x;
double r843358 = y;
double r843359 = r843357 / r843358;
double r843360 = 2.0;
double r843361 = -r843360;
double r843362 = 1.0;
double r843363 = fma(r843361, r843362, r843360);
double r843364 = t;
double r843365 = z;
double r843366 = r843364 * r843365;
double r843367 = r843360 / r843366;
double r843368 = r843360 / r843364;
double r843369 = r843368 - r843360;
double r843370 = r843367 + r843369;
double r843371 = r843363 + r843370;
double r843372 = r843359 + r843371;
return r843372;
}




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
rmApplied *-un-lft-identity0.1
Applied add-sqr-sqrt32.1
Applied prod-diff32.1
Applied associate-+r+32.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020043 +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))))