\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -1.604748353162188047247957506517549319946 \cdot 10^{-152}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\
\mathbf{elif}\;t \le 6.968434408856251116710259046152933189024 \cdot 10^{-278}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a \cdot a - 1 \cdot 1\right) \cdot \left(\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \sqrt[3]{t}\right) + \left(a - 1\right) \cdot \left(y \cdot b\right)} \cdot \left(\left(a - 1\right) \cdot \left(\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \sqrt[3]{t}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\mathsf{fma}\left(\frac{y}{t}, z, x\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}}{\sqrt[3]{\left(a + 1\right) + \frac{y}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{b}{\sqrt[3]{t}}} \cdot \sqrt[3]{\left(a + 1\right) + \frac{y}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{b}{\sqrt[3]{t}}}} \cdot \frac{\sqrt[3]{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}}{\sqrt[3]{\left(a + 1\right) + \frac{y}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{b}{\sqrt[3]{t}}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r695740 = x;
double r695741 = y;
double r695742 = z;
double r695743 = r695741 * r695742;
double r695744 = t;
double r695745 = r695743 / r695744;
double r695746 = r695740 + r695745;
double r695747 = a;
double r695748 = 1.0;
double r695749 = r695747 + r695748;
double r695750 = b;
double r695751 = r695741 * r695750;
double r695752 = r695751 / r695744;
double r695753 = r695749 + r695752;
double r695754 = r695746 / r695753;
return r695754;
}
double f(double x, double y, double z, double t, double a, double b) {
double r695755 = t;
double r695756 = -1.604748353162188e-152;
bool r695757 = r695755 <= r695756;
double r695758 = x;
double r695759 = y;
double r695760 = z;
double r695761 = r695759 * r695760;
double r695762 = r695761 / r695755;
double r695763 = r695758 + r695762;
double r695764 = a;
double r695765 = 1.0;
double r695766 = r695764 + r695765;
double r695767 = b;
double r695768 = r695767 / r695755;
double r695769 = r695759 * r695768;
double r695770 = r695766 + r695769;
double r695771 = r695763 / r695770;
double r695772 = 6.968434408856251e-278;
bool r695773 = r695755 <= r695772;
double r695774 = r695764 * r695764;
double r695775 = r695765 * r695765;
double r695776 = r695774 - r695775;
double r695777 = cbrt(r695755);
double r695778 = r695777 * r695777;
double r695779 = r695778 * r695777;
double r695780 = r695776 * r695779;
double r695781 = r695764 - r695765;
double r695782 = r695759 * r695767;
double r695783 = r695781 * r695782;
double r695784 = r695780 + r695783;
double r695785 = r695763 / r695784;
double r695786 = r695781 * r695779;
double r695787 = r695785 * r695786;
double r695788 = r695759 / r695755;
double r695789 = fma(r695788, r695760, r695758);
double r695790 = cbrt(r695789);
double r695791 = r695790 * r695790;
double r695792 = r695759 / r695778;
double r695793 = r695767 / r695777;
double r695794 = r695792 * r695793;
double r695795 = r695766 + r695794;
double r695796 = cbrt(r695795);
double r695797 = r695796 * r695796;
double r695798 = r695791 / r695797;
double r695799 = r695790 / r695796;
double r695800 = r695798 * r695799;
double r695801 = r695773 ? r695787 : r695800;
double r695802 = r695757 ? r695771 : r695801;
return r695802;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 16.4 |
|---|---|
| Target | 12.7 |
| Herbie | 17.0 |
if t < -1.604748353162188e-152Initial program 12.9
rmApplied *-un-lft-identity12.9
Applied times-frac11.6
Simplified11.6
if -1.604748353162188e-152 < t < 6.968434408856251e-278Initial program 29.7
rmApplied add-cube-cbrt29.9
Applied times-frac31.9
rmApplied frac-times29.9
Applied flip-+37.0
Applied frac-add37.1
Applied associate-/r/40.7
if 6.968434408856251e-278 < t Initial program 15.2
rmApplied add-cube-cbrt15.3
Applied times-frac14.8
rmApplied *-un-lft-identity14.8
Applied associate-/r*14.8
Simplified13.4
rmApplied add-cube-cbrt13.8
Applied add-cube-cbrt14.2
Applied times-frac14.2
Final simplification17.0
herbie shell --seed 2019354 +o rules:numerics
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:herbie-target
(if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))