\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 r889561 = x;
double r889562 = y;
double r889563 = z;
double r889564 = r889562 * r889563;
double r889565 = r889561 - r889564;
double r889566 = t;
double r889567 = a;
double r889568 = r889567 * r889563;
double r889569 = r889566 - r889568;
double r889570 = r889565 / r889569;
return r889570;
}
double f(double x, double y, double z, double t, double a) {
double r889571 = z;
double r889572 = -2.0099085297249333e-90;
bool r889573 = r889571 <= r889572;
double r889574 = 2.7203534373703028e-27;
bool r889575 = r889571 <= r889574;
double r889576 = !r889575;
bool r889577 = r889573 || r889576;
double r889578 = x;
double r889579 = t;
double r889580 = a;
double r889581 = r889580 * r889571;
double r889582 = r889579 - r889581;
double r889583 = r889578 / r889582;
double r889584 = y;
double r889585 = r889579 / r889571;
double r889586 = r889585 - r889580;
double r889587 = r889584 / r889586;
double r889588 = r889583 - r889587;
double r889589 = 1.0;
double r889590 = r889584 * r889571;
double r889591 = r889578 - r889590;
double r889592 = r889582 / r889591;
double r889593 = r889589 / r889592;
double r889594 = r889577 ? r889588 : r889593;
return r889594;
}




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 div-sub11.6
Simplified2.7
rmApplied un-div-inv2.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))))