\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -5.31566099741130341 \cdot 10^{-17} \lor \neg \left(z \le 0.014498322822577354\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\sqrt[3]{t - a \cdot z} \cdot \sqrt[3]{t - a \cdot z}}, \frac{x}{\sqrt[3]{t - a \cdot z}}, -\frac{y}{\frac{t}{z} - \frac{a}{1}}\right)\\
\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 r719911 = x;
double r719912 = y;
double r719913 = z;
double r719914 = r719912 * r719913;
double r719915 = r719911 - r719914;
double r719916 = t;
double r719917 = a;
double r719918 = r719917 * r719913;
double r719919 = r719916 - r719918;
double r719920 = r719915 / r719919;
return r719920;
}
double f(double x, double y, double z, double t, double a) {
double r719921 = z;
double r719922 = -5.3156609974113034e-17;
bool r719923 = r719921 <= r719922;
double r719924 = 0.014498322822577354;
bool r719925 = r719921 <= r719924;
double r719926 = !r719925;
bool r719927 = r719923 || r719926;
double r719928 = 1.0;
double r719929 = t;
double r719930 = a;
double r719931 = r719930 * r719921;
double r719932 = r719929 - r719931;
double r719933 = cbrt(r719932);
double r719934 = r719933 * r719933;
double r719935 = r719928 / r719934;
double r719936 = x;
double r719937 = r719936 / r719933;
double r719938 = y;
double r719939 = r719929 / r719921;
double r719940 = r719930 / r719928;
double r719941 = r719939 - r719940;
double r719942 = r719938 / r719941;
double r719943 = -r719942;
double r719944 = fma(r719935, r719937, r719943);
double r719945 = r719938 * r719921;
double r719946 = r719936 - r719945;
double r719947 = r719932 / r719946;
double r719948 = r719928 / r719947;
double r719949 = r719927 ? r719944 : r719948;
return r719949;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.3 |
|---|---|
| Target | 1.7 |
| Herbie | 1.8 |
if z < -5.3156609974113034e-17 or 0.014498322822577354 < z Initial program 19.8
rmApplied div-sub19.8
rmApplied associate-/l*12.3
rmApplied div-sub12.3
Simplified2.7
rmApplied add-cube-cbrt3.0
Applied *-un-lft-identity3.0
Applied times-frac3.0
Applied fma-neg3.0
if -5.3156609974113034e-17 < z < 0.014498322822577354Initial program 0.1
rmApplied clear-num0.6
Final simplification1.8
herbie shell --seed 2020024 +o rules:numerics
(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))))