\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -3.591884767125234007189270192734521744478 \cdot 10^{-16}:\\
\;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\left(a + 1\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\
\mathbf{elif}\;t \le 3.078693643875039956031098367503131499945 \cdot 10^{59}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{\frac{1}{t}}{\frac{1}{y \cdot b}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r468778 = x;
double r468779 = y;
double r468780 = z;
double r468781 = r468779 * r468780;
double r468782 = t;
double r468783 = r468781 / r468782;
double r468784 = r468778 + r468783;
double r468785 = a;
double r468786 = 1.0;
double r468787 = r468785 + r468786;
double r468788 = b;
double r468789 = r468779 * r468788;
double r468790 = r468789 / r468782;
double r468791 = r468787 + r468790;
double r468792 = r468784 / r468791;
return r468792;
}
double f(double x, double y, double z, double t, double a, double b) {
double r468793 = t;
double r468794 = -3.591884767125234e-16;
bool r468795 = r468793 <= r468794;
double r468796 = x;
double r468797 = y;
double r468798 = z;
double r468799 = r468798 / r468793;
double r468800 = r468797 * r468799;
double r468801 = r468796 + r468800;
double r468802 = a;
double r468803 = 1.0;
double r468804 = r468802 + r468803;
double r468805 = 1.0;
double r468806 = r468793 / r468797;
double r468807 = b;
double r468808 = r468806 / r468807;
double r468809 = r468805 / r468808;
double r468810 = r468804 + r468809;
double r468811 = r468801 / r468810;
double r468812 = 3.07869364387504e+59;
bool r468813 = r468793 <= r468812;
double r468814 = r468797 * r468798;
double r468815 = r468814 / r468793;
double r468816 = r468796 + r468815;
double r468817 = r468805 / r468793;
double r468818 = r468797 * r468807;
double r468819 = r468805 / r468818;
double r468820 = r468817 / r468819;
double r468821 = r468804 + r468820;
double r468822 = r468816 / r468821;
double r468823 = r468793 / r468798;
double r468824 = r468797 / r468823;
double r468825 = r468796 + r468824;
double r468826 = r468825 / r468810;
double r468827 = r468813 ? r468822 : r468826;
double r468828 = r468795 ? r468811 : r468827;
return r468828;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 16.6 |
|---|---|
| Target | 13.5 |
| Herbie | 12.9 |
if t < -3.591884767125234e-16Initial program 12.3
rmApplied clear-num12.3
rmApplied associate-/r*9.6
rmApplied *-un-lft-identity9.6
Applied times-frac5.0
Simplified5.0
if -3.591884767125234e-16 < t < 3.07869364387504e+59Initial program 20.6
rmApplied clear-num20.7
rmApplied div-inv20.7
Applied associate-/r*20.7
if 3.07869364387504e+59 < t Initial program 12.1
rmApplied clear-num12.1
rmApplied associate-/r*8.5
rmApplied associate-/l*3.2
Final simplification12.9
herbie shell --seed 2019303
(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.0369671037372459e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))