\frac{x}{y - z \cdot t}\begin{array}{l}
\mathbf{if}\;y \le -5441052365728334568188037948243968 \lor \neg \left(y \le -8.518426596525933669450559259262448611475 \cdot 10^{-213}\right):\\
\;\;\;\;\frac{x}{y - z \cdot t}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{y}{x} - \frac{z}{x} \cdot t}\\
\end{array}double f(double x, double y, double z, double t) {
double r717929 = x;
double r717930 = y;
double r717931 = z;
double r717932 = t;
double r717933 = r717931 * r717932;
double r717934 = r717930 - r717933;
double r717935 = r717929 / r717934;
return r717935;
}
double f(double x, double y, double z, double t) {
double r717936 = y;
double r717937 = -5.441052365728335e+33;
bool r717938 = r717936 <= r717937;
double r717939 = -8.518426596525934e-213;
bool r717940 = r717936 <= r717939;
double r717941 = !r717940;
bool r717942 = r717938 || r717941;
double r717943 = x;
double r717944 = z;
double r717945 = t;
double r717946 = r717944 * r717945;
double r717947 = r717936 - r717946;
double r717948 = r717943 / r717947;
double r717949 = 1.0;
double r717950 = r717936 / r717943;
double r717951 = r717944 / r717943;
double r717952 = r717951 * r717945;
double r717953 = r717950 - r717952;
double r717954 = r717949 / r717953;
double r717955 = r717942 ? r717948 : r717954;
return r717955;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.7 |
|---|---|
| Target | 1.9 |
| Herbie | 3.3 |
if y < -5.441052365728335e+33 or -8.518426596525934e-213 < y Initial program 2.7
if -5.441052365728335e+33 < y < -8.518426596525934e-213Initial program 2.6
rmApplied clear-num3.0
rmApplied div-sub3.0
Simplified5.6
Final simplification3.3
herbie shell --seed 2019350
(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))))