\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\mathsf{fma}\left(\left(\frac{1}{t} + \frac{\frac{1}{z}}{t}\right) - 1, 2, \frac{x}{y}\right)double f(double x, double y, double z, double t) {
double r791522 = x;
double r791523 = y;
double r791524 = r791522 / r791523;
double r791525 = 2.0;
double r791526 = z;
double r791527 = r791526 * r791525;
double r791528 = 1.0;
double r791529 = t;
double r791530 = r791528 - r791529;
double r791531 = r791527 * r791530;
double r791532 = r791525 + r791531;
double r791533 = r791529 * r791526;
double r791534 = r791532 / r791533;
double r791535 = r791524 + r791534;
return r791535;
}
double f(double x, double y, double z, double t) {
double r791536 = 1.0;
double r791537 = t;
double r791538 = r791536 / r791537;
double r791539 = 1.0;
double r791540 = z;
double r791541 = r791539 / r791540;
double r791542 = r791541 / r791537;
double r791543 = r791538 + r791542;
double r791544 = r791543 - r791539;
double r791545 = 2.0;
double r791546 = x;
double r791547 = y;
double r791548 = r791546 / r791547;
double r791549 = fma(r791544, r791545, r791548);
return r791549;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.4 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.4
Simplified0.1
Taylor expanded around 0 0.1
Simplified0.1
rmApplied *-un-lft-identity0.1
Applied *-un-lft-identity0.1
Applied distribute-lft-out0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019196 +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))))