\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\mathsf{fma}\left(\frac{2}{t}, \left(\frac{1}{z} + 1\right) - t, \frac{x}{y}\right)double f(double x, double y, double z, double t) {
double r36566298 = x;
double r36566299 = y;
double r36566300 = r36566298 / r36566299;
double r36566301 = 2.0;
double r36566302 = z;
double r36566303 = r36566302 * r36566301;
double r36566304 = 1.0;
double r36566305 = t;
double r36566306 = r36566304 - r36566305;
double r36566307 = r36566303 * r36566306;
double r36566308 = r36566301 + r36566307;
double r36566309 = r36566305 * r36566302;
double r36566310 = r36566308 / r36566309;
double r36566311 = r36566300 + r36566310;
return r36566311;
}
double f(double x, double y, double z, double t) {
double r36566312 = 2.0;
double r36566313 = t;
double r36566314 = r36566312 / r36566313;
double r36566315 = 1.0;
double r36566316 = z;
double r36566317 = r36566315 / r36566316;
double r36566318 = 1.0;
double r36566319 = r36566317 + r36566318;
double r36566320 = r36566319 - r36566313;
double r36566321 = x;
double r36566322 = y;
double r36566323 = r36566321 / r36566322;
double r36566324 = fma(r36566314, r36566320, r36566323);
return r36566324;
}




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
Simplified9.2
Taylor expanded around 0 0.1
Final simplification0.1
herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z t)
:name "Data.HashTable.ST.Basic:computeOverhead from hashtables-1.2.0.2"
:herbie-target
(- (/ (+ (/ 2.0 z) 2.0) t) (- 2.0 (/ x y)))
(+ (/ x y) (/ (+ 2.0 (* (* z 2.0) (- 1.0 t))) (* t z))))