\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -2.641509782526601298279532661534483525308 \cdot 10^{-139} \lor \neg \left(z \le 2.974028994343512209490359488108470942818 \cdot 10^{-131}\right):\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{1}{t - a \cdot z} \cdot \left(y \cdot z\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r476032 = x;
double r476033 = y;
double r476034 = z;
double r476035 = r476033 * r476034;
double r476036 = r476032 - r476035;
double r476037 = t;
double r476038 = a;
double r476039 = r476038 * r476034;
double r476040 = r476037 - r476039;
double r476041 = r476036 / r476040;
return r476041;
}
double f(double x, double y, double z, double t, double a) {
double r476042 = z;
double r476043 = -2.6415097825266013e-139;
bool r476044 = r476042 <= r476043;
double r476045 = 2.974028994343512e-131;
bool r476046 = r476042 <= r476045;
double r476047 = !r476046;
bool r476048 = r476044 || r476047;
double r476049 = x;
double r476050 = t;
double r476051 = a;
double r476052 = r476051 * r476042;
double r476053 = r476050 - r476052;
double r476054 = r476049 / r476053;
double r476055 = y;
double r476056 = r476050 / r476042;
double r476057 = r476056 - r476051;
double r476058 = r476055 / r476057;
double r476059 = r476054 - r476058;
double r476060 = 1.0;
double r476061 = r476060 / r476053;
double r476062 = r476055 * r476042;
double r476063 = r476061 * r476062;
double r476064 = r476054 - r476063;
double r476065 = r476048 ? r476059 : r476064;
return r476065;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.1 |
|---|---|
| Target | 1.6 |
| Herbie | 1.9 |
if z < -2.6415097825266013e-139 or 2.974028994343512e-131 < z Initial program 14.0
rmApplied *-un-lft-identity14.0
Applied *-un-lft-identity14.0
Applied times-frac14.0
Simplified14.0
rmApplied div-sub14.0
rmApplied associate-/l*9.5
rmApplied div-sub9.5
Simplified2.6
if -2.6415097825266013e-139 < z < 2.974028994343512e-131Initial program 0.1
rmApplied *-un-lft-identity0.1
Applied *-un-lft-identity0.1
Applied times-frac0.1
Simplified0.1
rmApplied div-sub0.1
rmApplied associate-/l*3.8
rmApplied div-inv3.9
Applied *-un-lft-identity3.9
Applied times-frac0.2
Simplified0.1
Final simplification1.9
herbie shell --seed 2019212
(FPCore (x y z t a)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
:precision binary64
:herbie-target
(if (< z -32113435955957344) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.51395223729782958e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))