\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\mathsf{fma}\left(-1 + \frac{\mathsf{fma}\left(z, 1, 1\right)}{t \cdot z}, 2, \frac{x}{y}\right)double f(double x, double y, double z, double t) {
double r34564335 = x;
double r34564336 = y;
double r34564337 = r34564335 / r34564336;
double r34564338 = 2.0;
double r34564339 = z;
double r34564340 = r34564339 * r34564338;
double r34564341 = 1.0;
double r34564342 = t;
double r34564343 = r34564341 - r34564342;
double r34564344 = r34564340 * r34564343;
double r34564345 = r34564338 + r34564344;
double r34564346 = r34564342 * r34564339;
double r34564347 = r34564345 / r34564346;
double r34564348 = r34564337 + r34564347;
return r34564348;
}
double f(double x, double y, double z, double t) {
double r34564349 = -1.0;
double r34564350 = z;
double r34564351 = 1.0;
double r34564352 = 1.0;
double r34564353 = fma(r34564350, r34564351, r34564352);
double r34564354 = t;
double r34564355 = r34564354 * r34564350;
double r34564356 = r34564353 / r34564355;
double r34564357 = r34564349 + r34564356;
double r34564358 = 2.0;
double r34564359 = x;
double r34564360 = y;
double r34564361 = r34564359 / r34564360;
double r34564362 = fma(r34564357, r34564358, r34564361);
return r34564362;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.8
Simplified0.1
rmApplied sub-neg0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019172 +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))))