\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\left(\frac{2}{t} + \left(\frac{\frac{\sqrt{2}}{\frac{1}{\sqrt{\sqrt{2}}}}}{\frac{z}{\frac{\sqrt{\sqrt{2}}}{t}}} - 2\right)\right) + \frac{x}{y}double f(double x, double y, double z, double t) {
double r991123 = x;
double r991124 = y;
double r991125 = r991123 / r991124;
double r991126 = 2.0;
double r991127 = z;
double r991128 = r991127 * r991126;
double r991129 = 1.0;
double r991130 = t;
double r991131 = r991129 - r991130;
double r991132 = r991128 * r991131;
double r991133 = r991126 + r991132;
double r991134 = r991130 * r991127;
double r991135 = r991133 / r991134;
double r991136 = r991125 + r991135;
return r991136;
}
double f(double x, double y, double z, double t) {
double r991137 = 2.0;
double r991138 = t;
double r991139 = r991137 / r991138;
double r991140 = sqrt(r991137);
double r991141 = 1.0;
double r991142 = sqrt(r991140);
double r991143 = r991141 / r991142;
double r991144 = r991140 / r991143;
double r991145 = z;
double r991146 = r991142 / r991138;
double r991147 = r991145 / r991146;
double r991148 = r991144 / r991147;
double r991149 = r991148 - r991137;
double r991150 = r991139 + r991149;
double r991151 = x;
double r991152 = y;
double r991153 = r991151 / r991152;
double r991154 = r991150 + r991153;
return r991154;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 9.4 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 9.4
Taylor expanded around 0 0.1
Simplified0.1
rmApplied *-un-lft-identity0.1
Applied add-sqr-sqrt0.3
Applied times-frac0.2
Applied associate-/l*0.2
rmApplied *-un-lft-identity0.2
Applied add-sqr-sqrt0.2
Applied sqrt-prod0.1
Applied times-frac0.1
Applied *-un-lft-identity0.1
Applied times-frac0.1
Applied associate-/r*0.1
Final simplification0.1
herbie shell --seed 2020045 +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))))