\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 r543588 = x;
double r543589 = y;
double r543590 = z;
double r543591 = t;
double r543592 = r543590 * r543591;
double r543593 = r543589 - r543592;
double r543594 = r543588 / r543593;
return r543594;
}
double f(double x, double y, double z, double t) {
double r543595 = z;
double r543596 = t;
double r543597 = r543595 * r543596;
double r543598 = -inf.0;
bool r543599 = r543597 <= r543598;
double r543600 = 1.8704379532132535e+286;
bool r543601 = r543597 <= r543600;
double r543602 = !r543601;
bool r543603 = r543599 || r543602;
double r543604 = 1.0;
double r543605 = y;
double r543606 = x;
double r543607 = r543605 / r543606;
double r543608 = r543595 / r543606;
double r543609 = r543608 * r543596;
double r543610 = r543607 - r543609;
double r543611 = r543604 / r543610;
double r543612 = r543605 - r543597;
double r543613 = r543606 / r543612;
double r543614 = r543603 ? r543611 : r543613;
return r543614;
}




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))))