\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;\frac{x - z \cdot y}{t - a \cdot z} \le -1.341427406791736534539647356100824094756 \cdot 10^{-264} \lor \neg \left(\frac{x - z \cdot y}{t - a \cdot z} \le 0.0\right):\\
\;\;\;\;\frac{x - z \cdot y}{t - a \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{t}{\mathsf{fma}\left(z, -y, x\right)} - z \cdot \frac{a}{\mathsf{fma}\left(z, -y, x\right)}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r430658 = x;
double r430659 = y;
double r430660 = z;
double r430661 = r430659 * r430660;
double r430662 = r430658 - r430661;
double r430663 = t;
double r430664 = a;
double r430665 = r430664 * r430660;
double r430666 = r430663 - r430665;
double r430667 = r430662 / r430666;
return r430667;
}
double f(double x, double y, double z, double t, double a) {
double r430668 = x;
double r430669 = z;
double r430670 = y;
double r430671 = r430669 * r430670;
double r430672 = r430668 - r430671;
double r430673 = t;
double r430674 = a;
double r430675 = r430674 * r430669;
double r430676 = r430673 - r430675;
double r430677 = r430672 / r430676;
double r430678 = -1.3414274067917365e-264;
bool r430679 = r430677 <= r430678;
double r430680 = 0.0;
bool r430681 = r430677 <= r430680;
double r430682 = !r430681;
bool r430683 = r430679 || r430682;
double r430684 = 1.0;
double r430685 = -r430670;
double r430686 = fma(r430669, r430685, r430668);
double r430687 = r430673 / r430686;
double r430688 = r430674 / r430686;
double r430689 = r430669 * r430688;
double r430690 = r430687 - r430689;
double r430691 = r430684 / r430690;
double r430692 = r430683 ? r430677 : r430691;
return r430692;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 11.0 |
|---|---|
| Target | 1.7 |
| Herbie | 8.0 |
if (/ (- x (* y z)) (- t (* a z))) < -1.3414274067917365e-264 or 0.0 < (/ (- x (* y z)) (- t (* a z))) Initial program 8.7
if -1.3414274067917365e-264 < (/ (- x (* y z)) (- t (* a z))) < 0.0Initial program 22.5
rmApplied clear-num23.0
Simplified23.0
rmApplied div-sub24.0
Simplified24.0
Simplified4.6
Final simplification8.0
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t a)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
:herbie-target
(if (< z -32113435955957344.0) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.5139522372978296e-86) (* (- x (* y z)) (/ 1.0 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))