\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -2.147501379453681047725513588483459387151 \cdot 10^{-37} \lor \neg \left(z \le 6.9713412473177113437097495394906217014 \cdot 10^{-63}\right):\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{x - y \cdot z}{t - a \cdot z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r752621 = x;
double r752622 = y;
double r752623 = z;
double r752624 = r752622 * r752623;
double r752625 = r752621 - r752624;
double r752626 = t;
double r752627 = a;
double r752628 = r752627 * r752623;
double r752629 = r752626 - r752628;
double r752630 = r752625 / r752629;
return r752630;
}
double f(double x, double y, double z, double t, double a) {
double r752631 = z;
double r752632 = -2.147501379453681e-37;
bool r752633 = r752631 <= r752632;
double r752634 = 6.971341247317711e-63;
bool r752635 = r752631 <= r752634;
double r752636 = !r752635;
bool r752637 = r752633 || r752636;
double r752638 = x;
double r752639 = t;
double r752640 = a;
double r752641 = r752640 * r752631;
double r752642 = r752639 - r752641;
double r752643 = r752638 / r752642;
double r752644 = y;
double r752645 = r752639 / r752631;
double r752646 = r752645 - r752640;
double r752647 = r752644 / r752646;
double r752648 = r752643 - r752647;
double r752649 = r752644 * r752631;
double r752650 = r752638 - r752649;
double r752651 = r752650 / r752642;
double r752652 = r752637 ? r752648 : r752651;
return r752652;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.3 |
|---|---|
| Target | 1.8 |
| Herbie | 1.6 |
if z < -2.147501379453681e-37 or 6.971341247317711e-63 < z Initial program 17.8
rmApplied div-sub17.8
Simplified11.6
rmApplied *-un-lft-identity11.6
Applied associate-*l*11.6
Simplified2.8
if -2.147501379453681e-37 < z < 6.971341247317711e-63Initial program 0.1
rmApplied div-sub0.1
Simplified3.2
rmApplied associate-*r/0.1
Applied sub-div0.1
Final simplification1.6
herbie shell --seed 2019350
(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))))