\frac{x}{y - z \cdot t}\begin{array}{l}
\mathbf{if}\;z \cdot t = -\infty \lor \neg \left(z \cdot t \le 1.343488166531035091051466743529265739987 \cdot 10^{303}\right):\\
\;\;\;\;\frac{1}{\frac{y}{x} - \frac{t}{\frac{x}{z}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y - z \cdot t}\\
\end{array}double f(double x, double y, double z, double t) {
double r663088 = x;
double r663089 = y;
double r663090 = z;
double r663091 = t;
double r663092 = r663090 * r663091;
double r663093 = r663089 - r663092;
double r663094 = r663088 / r663093;
return r663094;
}
double f(double x, double y, double z, double t) {
double r663095 = z;
double r663096 = t;
double r663097 = r663095 * r663096;
double r663098 = -inf.0;
bool r663099 = r663097 <= r663098;
double r663100 = 1.3434881665310351e+303;
bool r663101 = r663097 <= r663100;
double r663102 = !r663101;
bool r663103 = r663099 || r663102;
double r663104 = 1.0;
double r663105 = y;
double r663106 = x;
double r663107 = r663105 / r663106;
double r663108 = r663106 / r663095;
double r663109 = r663096 / r663108;
double r663110 = r663107 - r663109;
double r663111 = r663104 / r663110;
double r663112 = r663105 - r663097;
double r663113 = r663106 / r663112;
double r663114 = r663103 ? r663111 : r663113;
return r663114;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.8 |
|---|---|
| Target | 1.7 |
| Herbie | 0.8 |
if (* z t) < -inf.0 or 1.3434881665310351e+303 < (* z t) Initial program 20.4
rmApplied clear-num20.4
Simplified20.4
rmApplied div-inv20.4
Taylor expanded around 0 24.8
Simplified5.0
if -inf.0 < (* z t) < 1.3434881665310351e+303Initial program 0.1
Final simplification0.8
herbie shell --seed 2019196 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, B"
:herbie-target
(if (< x -1.618195973607049e+50) (/ 1.0 (- (/ y x) (* (/ z x) t))) (if (< x 2.1378306434876444e+131) (/ x (- y (* z t))) (/ 1.0 (- (/ y x) (* (/ z x) t)))))
(/ x (- y (* z t))))