\frac{x}{y - z \cdot t}\begin{array}{l}
\mathbf{if}\;z \cdot t \le 1.543751143088452374202847261662502060674 \cdot 10^{293}:\\
\;\;\;\;\frac{x}{y - z \cdot t}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{y}{x} - \frac{z}{\frac{x}{t}}}\\
\end{array}double f(double x, double y, double z, double t) {
double r447742 = x;
double r447743 = y;
double r447744 = z;
double r447745 = t;
double r447746 = r447744 * r447745;
double r447747 = r447743 - r447746;
double r447748 = r447742 / r447747;
return r447748;
}
double f(double x, double y, double z, double t) {
double r447749 = z;
double r447750 = t;
double r447751 = r447749 * r447750;
double r447752 = 1.5437511430884524e+293;
bool r447753 = r447751 <= r447752;
double r447754 = x;
double r447755 = y;
double r447756 = r447755 - r447751;
double r447757 = r447754 / r447756;
double r447758 = 1.0;
double r447759 = r447755 / r447754;
double r447760 = r447754 / r447750;
double r447761 = r447749 / r447760;
double r447762 = r447759 - r447761;
double r447763 = r447758 / r447762;
double r447764 = r447753 ? r447757 : r447763;
return r447764;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.9 |
|---|---|
| Target | 1.8 |
| Herbie | 1.8 |
if (* z t) < 1.5437511430884524e+293Initial program 1.6
if 1.5437511430884524e+293 < (* z t) Initial program 19.8
rmApplied clear-num19.8
Simplified19.8
rmApplied div-sub23.9
Simplified4.9
Final simplification1.8
herbie shell --seed 2019208 +o rules:numerics
(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))))