\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -2.0099085297249333 \cdot 10^{-90} \lor \neg \left(z \le 2.72035343737030278 \cdot 10^{-27}\right):\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{t - a \cdot z}{x - y \cdot z}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r803634 = x;
double r803635 = y;
double r803636 = z;
double r803637 = r803635 * r803636;
double r803638 = r803634 - r803637;
double r803639 = t;
double r803640 = a;
double r803641 = r803640 * r803636;
double r803642 = r803639 - r803641;
double r803643 = r803638 / r803642;
return r803643;
}
double f(double x, double y, double z, double t, double a) {
double r803644 = z;
double r803645 = -2.0099085297249333e-90;
bool r803646 = r803644 <= r803645;
double r803647 = 2.7203534373703028e-27;
bool r803648 = r803644 <= r803647;
double r803649 = !r803648;
bool r803650 = r803646 || r803649;
double r803651 = x;
double r803652 = t;
double r803653 = a;
double r803654 = r803653 * r803644;
double r803655 = r803652 - r803654;
double r803656 = r803651 / r803655;
double r803657 = y;
double r803658 = r803652 / r803644;
double r803659 = r803658 - r803653;
double r803660 = r803657 / r803659;
double r803661 = r803656 - r803660;
double r803662 = 1.0;
double r803663 = r803657 * r803644;
double r803664 = r803651 - r803663;
double r803665 = r803655 / r803664;
double r803666 = r803662 / r803665;
double r803667 = r803650 ? r803661 : r803666;
return r803667;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.8 |
|---|---|
| Target | 1.7 |
| Herbie | 1.8 |
if z < -2.0099085297249333e-90 or 2.7203534373703028e-27 < z Initial program 17.9
rmApplied div-sub17.9
Simplified11.5
rmApplied clear-num11.6
rmApplied pow111.6
Applied pow111.6
Applied pow-prod-down11.6
Simplified2.6
if -2.0099085297249333e-90 < z < 2.7203534373703028e-27Initial program 0.1
rmApplied clear-num0.6
Final simplification1.8
herbie shell --seed 2020046
(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))))