\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;a \le -588618441067951585614626816:\\
\;\;\;\;\frac{x}{t - z \cdot a} - \frac{\frac{\frac{z}{\sqrt[3]{\frac{t - z \cdot a}{y}}}}{\sqrt[3]{\frac{t - z \cdot a}{y}}}}{\sqrt[3]{\frac{t - z \cdot a}{y}}}\\
\mathbf{elif}\;a \le -1.98739129912160760220606665896447740271 \cdot 10^{-48} \lor \neg \left(a \le 2.204438167997821044006514459092402160216 \cdot 10^{-232}\right) \land a \le 1.39431147208504746337234663751222001764 \cdot 10^{-25}:\\
\;\;\;\;\frac{1}{\frac{t - z \cdot a}{x - y \cdot z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{t - z \cdot a} - z \cdot \frac{1}{\frac{t}{y} - \frac{z}{\frac{y}{a}}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r590642 = x;
double r590643 = y;
double r590644 = z;
double r590645 = r590643 * r590644;
double r590646 = r590642 - r590645;
double r590647 = t;
double r590648 = a;
double r590649 = r590648 * r590644;
double r590650 = r590647 - r590649;
double r590651 = r590646 / r590650;
return r590651;
}
double f(double x, double y, double z, double t, double a) {
double r590652 = a;
double r590653 = -5.886184410679516e+26;
bool r590654 = r590652 <= r590653;
double r590655 = x;
double r590656 = t;
double r590657 = z;
double r590658 = r590657 * r590652;
double r590659 = r590656 - r590658;
double r590660 = r590655 / r590659;
double r590661 = y;
double r590662 = r590659 / r590661;
double r590663 = cbrt(r590662);
double r590664 = r590657 / r590663;
double r590665 = r590664 / r590663;
double r590666 = r590665 / r590663;
double r590667 = r590660 - r590666;
double r590668 = -1.9873912991216076e-48;
bool r590669 = r590652 <= r590668;
double r590670 = 2.204438167997821e-232;
bool r590671 = r590652 <= r590670;
double r590672 = !r590671;
double r590673 = 1.3943114720850475e-25;
bool r590674 = r590652 <= r590673;
bool r590675 = r590672 && r590674;
bool r590676 = r590669 || r590675;
double r590677 = 1.0;
double r590678 = r590661 * r590657;
double r590679 = r590655 - r590678;
double r590680 = r590659 / r590679;
double r590681 = r590677 / r590680;
double r590682 = r590656 / r590661;
double r590683 = r590661 / r590652;
double r590684 = r590657 / r590683;
double r590685 = r590682 - r590684;
double r590686 = r590677 / r590685;
double r590687 = r590657 * r590686;
double r590688 = r590660 - r590687;
double r590689 = r590676 ? r590681 : r590688;
double r590690 = r590654 ? r590667 : r590689;
return r590690;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 11.0 |
|---|---|
| Target | 1.7 |
| Herbie | 9.7 |
if a < -5.886184410679516e+26Initial program 16.5
rmApplied div-sub16.5
Simplified15.3
rmApplied clear-num15.4
rmApplied un-div-inv15.3
rmApplied add-cube-cbrt15.6
Applied associate-/r*15.6
Simplified15.6
if -5.886184410679516e+26 < a < -1.9873912991216076e-48 or 2.204438167997821e-232 < a < 1.3943114720850475e-25Initial program 6.3
rmApplied clear-num6.5
Simplified6.5
if -1.9873912991216076e-48 < a < 2.204438167997821e-232 or 1.3943114720850475e-25 < a Initial program 10.3
rmApplied div-sub10.3
Simplified9.2
rmApplied clear-num9.3
rmApplied div-sub10.5
Simplified8.4
Final simplification9.7
herbie shell --seed 2019174
(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))))