\frac{x}{y - z \cdot t}\begin{array}{l}
\mathbf{if}\;z \cdot t = -\infty \lor \neg \left(z \cdot t \le 1.870437953213253477696033415768704282134 \cdot 10^{286}\right):\\
\;\;\;\;\frac{1}{\frac{y}{x} - \frac{z}{x} \cdot t}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y - z \cdot t}\\
\end{array}double f(double x, double y, double z, double t) {
double r591537 = x;
double r591538 = y;
double r591539 = z;
double r591540 = t;
double r591541 = r591539 * r591540;
double r591542 = r591538 - r591541;
double r591543 = r591537 / r591542;
return r591543;
}
double f(double x, double y, double z, double t) {
double r591544 = z;
double r591545 = t;
double r591546 = r591544 * r591545;
double r591547 = -inf.0;
bool r591548 = r591546 <= r591547;
double r591549 = 1.8704379532132535e+286;
bool r591550 = r591546 <= r591549;
double r591551 = !r591550;
bool r591552 = r591548 || r591551;
double r591553 = 1.0;
double r591554 = y;
double r591555 = x;
double r591556 = r591554 / r591555;
double r591557 = r591544 / r591555;
double r591558 = r591557 * r591545;
double r591559 = r591556 - r591558;
double r591560 = r591553 / r591559;
double r591561 = r591554 - r591546;
double r591562 = r591555 / r591561;
double r591563 = r591552 ? r591560 : r591562;
return r591563;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.9 |
|---|---|
| Target | 1.8 |
| Herbie | 0.8 |
if (* z t) < -inf.0 or 1.8704379532132535e+286 < (* z t) Initial program 20.1
rmApplied clear-num20.0
rmApplied div-sub24.0
Simplified5.0
if -inf.0 < (* z t) < 1.8704379532132535e+286Initial program 0.1
Final simplification0.8
herbie shell --seed 2019326
(FPCore (x y z t)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:herbie-target
(if (< x -1.618195973607049e+50) (/ 1 (- (/ y x) (* (/ z x) t))) (if (< x 2.1378306434876444e+131) (/ x (- y (* z t))) (/ 1 (- (/ y x) (* (/ z x) t)))))
(/ x (- y (* z t))))