\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -1.873159407921233748848095007688082806631 \cdot 10^{59} \lor \neg \left(z \le 1.295167332391820426867656083484373540485 \cdot 10^{-63}\right):\\
\;\;\;\;x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y \cdot z}{t - a \cdot z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r411077 = x;
double r411078 = y;
double r411079 = z;
double r411080 = r411078 * r411079;
double r411081 = r411077 - r411080;
double r411082 = t;
double r411083 = a;
double r411084 = r411083 * r411079;
double r411085 = r411082 - r411084;
double r411086 = r411081 / r411085;
return r411086;
}
double f(double x, double y, double z, double t, double a) {
double r411087 = z;
double r411088 = -1.8731594079212337e+59;
bool r411089 = r411087 <= r411088;
double r411090 = 1.2951673323918204e-63;
bool r411091 = r411087 <= r411090;
double r411092 = !r411091;
bool r411093 = r411089 || r411092;
double r411094 = x;
double r411095 = 1.0;
double r411096 = t;
double r411097 = a;
double r411098 = r411097 * r411087;
double r411099 = r411096 - r411098;
double r411100 = r411095 / r411099;
double r411101 = r411094 * r411100;
double r411102 = y;
double r411103 = r411096 / r411087;
double r411104 = r411103 - r411097;
double r411105 = r411102 / r411104;
double r411106 = r411101 - r411105;
double r411107 = r411094 / r411099;
double r411108 = r411102 * r411087;
double r411109 = r411108 / r411099;
double r411110 = r411107 - r411109;
double r411111 = r411093 ? r411106 : r411110;
return r411111;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.9 |
|---|---|
| Target | 1.8 |
| Herbie | 1.9 |
if z < -1.8731594079212337e+59 or 1.2951673323918204e-63 < z Initial program 20.6
rmApplied div-sub20.6
Simplified13.0
rmApplied pow113.0
Applied pow113.0
Applied pow-prod-down13.0
Simplified3.0
rmApplied div-inv3.0
if -1.8731594079212337e+59 < z < 1.2951673323918204e-63Initial program 0.6
rmApplied div-sub0.6
Simplified2.7
rmApplied associate-*r/0.6
Final simplification1.9
herbie shell --seed 2019304 +o rules:numerics
(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))))