\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{\frac{1}{t}}{z}, \frac{2}{t}\right) - 2\right)double f(double x, double y, double z, double t) {
double r982304 = x;
double r982305 = y;
double r982306 = r982304 / r982305;
double r982307 = 2.0;
double r982308 = z;
double r982309 = r982308 * r982307;
double r982310 = 1.0;
double r982311 = t;
double r982312 = r982310 - r982311;
double r982313 = r982309 * r982312;
double r982314 = r982307 + r982313;
double r982315 = r982311 * r982308;
double r982316 = r982314 / r982315;
double r982317 = r982306 + r982316;
return r982317;
}
double f(double x, double y, double z, double t) {
double r982318 = x;
double r982319 = y;
double r982320 = r982318 / r982319;
double r982321 = 2.0;
double r982322 = 1.0;
double r982323 = t;
double r982324 = r982322 / r982323;
double r982325 = z;
double r982326 = r982324 / r982325;
double r982327 = r982321 / r982323;
double r982328 = fma(r982321, r982326, r982327);
double r982329 = r982328 - r982321;
double r982330 = r982320 + r982329;
return r982330;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.1
Taylor expanded around 0 0.1
Simplified0.1
rmApplied associate-/r*0.1
Final simplification0.1
herbie shell --seed 2019354 +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))))