\frac{x}{y - z \cdot t}\begin{array}{l}
\mathbf{if}\;z \cdot t \le 2.100739535547299830719442701131869475522 \cdot 10^{286}:\\
\;\;\;\;\frac{x}{y - z \cdot t}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{y}{x} - \frac{t}{x} \cdot z}\\
\end{array}double f(double x, double y, double z, double t) {
double r570248 = x;
double r570249 = y;
double r570250 = z;
double r570251 = t;
double r570252 = r570250 * r570251;
double r570253 = r570249 - r570252;
double r570254 = r570248 / r570253;
return r570254;
}
double f(double x, double y, double z, double t) {
double r570255 = z;
double r570256 = t;
double r570257 = r570255 * r570256;
double r570258 = 2.1007395355473e+286;
bool r570259 = r570257 <= r570258;
double r570260 = x;
double r570261 = y;
double r570262 = r570261 - r570257;
double r570263 = r570260 / r570262;
double r570264 = 1.0;
double r570265 = r570261 / r570260;
double r570266 = r570256 / r570260;
double r570267 = r570266 * r570255;
double r570268 = r570265 - r570267;
double r570269 = r570264 / r570268;
double r570270 = r570259 ? r570263 : r570269;
return r570270;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.7 |
|---|---|
| Target | 1.6 |
| Herbie | 1.6 |
if (* z t) < 2.1007395355473e+286Initial program 1.4
if 2.1007395355473e+286 < (* z t) Initial program 18.1
rmApplied clear-num18.1
Simplified18.1
rmApplied div-sub21.3
Simplified4.0
Final simplification1.6
herbie shell --seed 2019212
(FPCore (x y z t)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:herbie-target
(if (< x -1.618195973607049e50) (/ 1 (- (/ y x) (* (/ z x) t))) (if (< x 2.13783064348764444e131) (/ x (- y (* z t))) (/ 1 (- (/ y x) (* (/ z x) t)))))
(/ x (- y (* z t))))