\frac{x}{y} + \frac{2.0 + \left(z \cdot 2.0\right) \cdot \left(1.0 - t\right)}{t \cdot z}\mathsf{fma}\left(\sqrt{2.0}, \frac{\frac{\sqrt{\sqrt{2.0}}}{t}}{z} \cdot \sqrt{\sqrt{2.0}}, \frac{2.0}{t} - 2.0\right) + \frac{x}{y}double f(double x, double y, double z, double t) {
double r37883712 = x;
double r37883713 = y;
double r37883714 = r37883712 / r37883713;
double r37883715 = 2.0;
double r37883716 = z;
double r37883717 = r37883716 * r37883715;
double r37883718 = 1.0;
double r37883719 = t;
double r37883720 = r37883718 - r37883719;
double r37883721 = r37883717 * r37883720;
double r37883722 = r37883715 + r37883721;
double r37883723 = r37883719 * r37883716;
double r37883724 = r37883722 / r37883723;
double r37883725 = r37883714 + r37883724;
return r37883725;
}
double f(double x, double y, double z, double t) {
double r37883726 = 2.0;
double r37883727 = sqrt(r37883726);
double r37883728 = sqrt(r37883727);
double r37883729 = t;
double r37883730 = r37883728 / r37883729;
double r37883731 = z;
double r37883732 = r37883730 / r37883731;
double r37883733 = r37883732 * r37883728;
double r37883734 = r37883726 / r37883729;
double r37883735 = r37883734 - r37883726;
double r37883736 = fma(r37883727, r37883733, r37883735);
double r37883737 = x;
double r37883738 = y;
double r37883739 = r37883737 / r37883738;
double r37883740 = r37883736 + r37883739;
return r37883740;
}




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 *-un-lft-identity0.1
Applied *-un-lft-identity0.1
Applied add-sqr-sqrt0.3
Applied times-frac0.2
Applied times-frac0.2
Applied fma-def0.2
rmApplied *-un-lft-identity0.2
Applied *-un-lft-identity0.2
Applied add-sqr-sqrt0.2
Applied sqrt-prod0.1
Applied times-frac0.1
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019163 +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))))