\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -1.422147047487083834441783199364442582672 \cdot 10^{-154} \lor \neg \left(z \le 2.571049573594902717921673289474660102313 \cdot 10^{-123}\right):\\
\;\;\;\;\frac{1}{\frac{t - a \cdot z}{x}} - \frac{y}{\frac{t}{z} - \frac{a}{1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y \cdot z}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r696233 = x;
double r696234 = y;
double r696235 = z;
double r696236 = r696234 * r696235;
double r696237 = r696233 - r696236;
double r696238 = t;
double r696239 = a;
double r696240 = r696239 * r696235;
double r696241 = r696238 - r696240;
double r696242 = r696237 / r696241;
return r696242;
}
double f(double x, double y, double z, double t, double a) {
double r696243 = z;
double r696244 = -1.4221470474870838e-154;
bool r696245 = r696243 <= r696244;
double r696246 = 2.5710495735949027e-123;
bool r696247 = r696243 <= r696246;
double r696248 = !r696247;
bool r696249 = r696245 || r696248;
double r696250 = 1.0;
double r696251 = t;
double r696252 = a;
double r696253 = r696252 * r696243;
double r696254 = r696251 - r696253;
double r696255 = x;
double r696256 = r696254 / r696255;
double r696257 = r696250 / r696256;
double r696258 = y;
double r696259 = r696251 / r696243;
double r696260 = r696252 / r696250;
double r696261 = r696259 - r696260;
double r696262 = r696258 / r696261;
double r696263 = r696257 - r696262;
double r696264 = r696255 / r696254;
double r696265 = r696258 * r696243;
double r696266 = r696265 / r696251;
double r696267 = r696264 - r696266;
double r696268 = r696249 ? r696263 : r696267;
return r696268;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.5 |
|---|---|
| Target | 1.7 |
| Herbie | 3.8 |
if z < -1.4221470474870838e-154 or 2.5710495735949027e-123 < z Initial program 14.4
rmApplied div-sub14.4
rmApplied associate-/l*9.3
rmApplied div-sub9.3
Simplified2.6
rmApplied clear-num2.8
if -1.4221470474870838e-154 < z < 2.5710495735949027e-123Initial program 0.1
rmApplied div-sub0.1
Taylor expanded around 0 6.5
Final simplification3.8
herbie shell --seed 2019354 +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.5139522372978296e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))