\frac{x}{y - z \cdot t}\begin{array}{l}
\mathbf{if}\;z \cdot t \le 1.349598904952956934646438794357870456303 \cdot 10^{289}:\\
\;\;\;\;\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 r451598 = x;
double r451599 = y;
double r451600 = z;
double r451601 = t;
double r451602 = r451600 * r451601;
double r451603 = r451599 - r451602;
double r451604 = r451598 / r451603;
return r451604;
}
double f(double x, double y, double z, double t) {
double r451605 = z;
double r451606 = t;
double r451607 = r451605 * r451606;
double r451608 = 1.349598904952957e+289;
bool r451609 = r451607 <= r451608;
double r451610 = x;
double r451611 = y;
double r451612 = r451611 - r451607;
double r451613 = r451610 / r451612;
double r451614 = 1.0;
double r451615 = r451611 / r451610;
double r451616 = r451606 / r451610;
double r451617 = r451616 * r451605;
double r451618 = r451615 - r451617;
double r451619 = r451614 / r451618;
double r451620 = r451609 ? r451613 : r451619;
return r451620;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.8 |
|---|---|
| Target | 1.6 |
| Herbie | 1.9 |
if (* z t) < 1.349598904952957e+289Initial program 1.6
rmApplied clear-num2.1
rmApplied *-un-lft-identity2.1
Applied *-un-lft-identity2.1
Applied times-frac2.1
Applied add-cube-cbrt2.1
Applied times-frac2.1
Simplified2.1
Simplified1.6
if 1.349598904952957e+289 < (* z t) Initial program 17.9
rmApplied clear-num18.0
rmApplied div-sub22.4
Simplified5.4
Final simplification1.9
herbie shell --seed 2019322 +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.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))))