\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -1.49705735611404329 \cdot 10^{22} \lor \neg \left(z \le 178345.007446012256\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{t}, \frac{x}{y} - 2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y} + \frac{\frac{\mathsf{fma}\left(z, 2 \cdot \left(1 - t\right), 2\right)}{t}}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r761282 = x;
double r761283 = y;
double r761284 = r761282 / r761283;
double r761285 = 2.0;
double r761286 = z;
double r761287 = r761286 * r761285;
double r761288 = 1.0;
double r761289 = t;
double r761290 = r761288 - r761289;
double r761291 = r761287 * r761290;
double r761292 = r761285 + r761291;
double r761293 = r761289 * r761286;
double r761294 = r761292 / r761293;
double r761295 = r761284 + r761294;
return r761295;
}
double f(double x, double y, double z, double t) {
double r761296 = z;
double r761297 = -1.4970573561140433e+22;
bool r761298 = r761296 <= r761297;
double r761299 = 178345.00744601226;
bool r761300 = r761296 <= r761299;
double r761301 = !r761300;
bool r761302 = r761298 || r761301;
double r761303 = 2.0;
double r761304 = 1.0;
double r761305 = t;
double r761306 = r761304 / r761305;
double r761307 = x;
double r761308 = y;
double r761309 = r761307 / r761308;
double r761310 = r761309 - r761303;
double r761311 = fma(r761303, r761306, r761310);
double r761312 = 1.0;
double r761313 = r761312 - r761305;
double r761314 = r761303 * r761313;
double r761315 = fma(r761296, r761314, r761303);
double r761316 = r761315 / r761305;
double r761317 = r761316 / r761296;
double r761318 = r761309 + r761317;
double r761319 = r761302 ? r761311 : r761318;
return r761319;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.2 |
|---|---|
| Target | 0.1 |
| Herbie | 0.3 |
if z < -1.4970573561140433e+22 or 178345.00744601226 < z Initial program 16.5
Simplified16.4
Taylor expanded around inf 0.1
Simplified0.1
if -1.4970573561140433e+22 < z < 178345.00744601226Initial program 0.2
rmApplied associate-/r*0.3
Simplified0.4
Final simplification0.3
herbie shell --seed 2020089 +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))))