Average Error: 16.5 → 15.0
Time: 19.9s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
\[\begin{array}{l} \mathbf{if}\;t \le -1.728367153749501 \cdot 10^{-199}:\\ \;\;\;\;\frac{x + z \cdot \frac{1}{\frac{t}{y}}}{\left(1.0 + a\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\ \mathbf{elif}\;t \le 9.261783680345339 \cdot 10^{-292}:\\ \;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(1.0 \cdot 1.0 + a \cdot \left(a - 1.0\right)\right) \cdot \left(b \cdot y\right) + t \cdot \left(\left(1.0 \cdot 1.0\right) \cdot 1.0 + a \cdot \left(a \cdot a\right)\right)} \cdot \left(t \cdot \left(\left(1.0 \cdot 1.0 - a \cdot 1.0\right) + a \cdot a\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x + z \cdot \frac{1}{\frac{t}{y}}}{\left(1.0 + a\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\ \end{array}\]
\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}
\begin{array}{l}
\mathbf{if}\;t \le -1.728367153749501 \cdot 10^{-199}:\\
\;\;\;\;\frac{x + z \cdot \frac{1}{\frac{t}{y}}}{\left(1.0 + a\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\

\mathbf{elif}\;t \le 9.261783680345339 \cdot 10^{-292}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(1.0 \cdot 1.0 + a \cdot \left(a - 1.0\right)\right) \cdot \left(b \cdot y\right) + t \cdot \left(\left(1.0 \cdot 1.0\right) \cdot 1.0 + a \cdot \left(a \cdot a\right)\right)} \cdot \left(t \cdot \left(\left(1.0 \cdot 1.0 - a \cdot 1.0\right) + a \cdot a\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{x + z \cdot \frac{1}{\frac{t}{y}}}{\left(1.0 + a\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 r38827891 = x;
        double r38827892 = y;
        double r38827893 = z;
        double r38827894 = r38827892 * r38827893;
        double r38827895 = t;
        double r38827896 = r38827894 / r38827895;
        double r38827897 = r38827891 + r38827896;
        double r38827898 = a;
        double r38827899 = 1.0;
        double r38827900 = r38827898 + r38827899;
        double r38827901 = b;
        double r38827902 = r38827892 * r38827901;
        double r38827903 = r38827902 / r38827895;
        double r38827904 = r38827900 + r38827903;
        double r38827905 = r38827897 / r38827904;
        return r38827905;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r38827906 = t;
        double r38827907 = -1.728367153749501e-199;
        bool r38827908 = r38827906 <= r38827907;
        double r38827909 = x;
        double r38827910 = z;
        double r38827911 = 1.0;
        double r38827912 = y;
        double r38827913 = r38827906 / r38827912;
        double r38827914 = r38827911 / r38827913;
        double r38827915 = r38827910 * r38827914;
        double r38827916 = r38827909 + r38827915;
        double r38827917 = 1.0;
        double r38827918 = a;
        double r38827919 = r38827917 + r38827918;
        double r38827920 = b;
        double r38827921 = r38827913 / r38827920;
        double r38827922 = r38827911 / r38827921;
        double r38827923 = r38827919 + r38827922;
        double r38827924 = r38827916 / r38827923;
        double r38827925 = 9.261783680345339e-292;
        bool r38827926 = r38827906 <= r38827925;
        double r38827927 = r38827912 * r38827910;
        double r38827928 = r38827927 / r38827906;
        double r38827929 = r38827909 + r38827928;
        double r38827930 = r38827917 * r38827917;
        double r38827931 = r38827918 - r38827917;
        double r38827932 = r38827918 * r38827931;
        double r38827933 = r38827930 + r38827932;
        double r38827934 = r38827920 * r38827912;
        double r38827935 = r38827933 * r38827934;
        double r38827936 = r38827930 * r38827917;
        double r38827937 = r38827918 * r38827918;
        double r38827938 = r38827918 * r38827937;
        double r38827939 = r38827936 + r38827938;
        double r38827940 = r38827906 * r38827939;
        double r38827941 = r38827935 + r38827940;
        double r38827942 = r38827929 / r38827941;
        double r38827943 = r38827918 * r38827917;
        double r38827944 = r38827930 - r38827943;
        double r38827945 = r38827944 + r38827937;
        double r38827946 = r38827906 * r38827945;
        double r38827947 = r38827942 * r38827946;
        double r38827948 = r38827926 ? r38827947 : r38827924;
        double r38827949 = r38827908 ? r38827924 : r38827948;
        return r38827949;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original16.5
Target13.1
Herbie15.0
\[\begin{array}{l} \mathbf{if}\;t \lt -1.3659085366310088 \cdot 10^{-271}:\\ \;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y}{t} \cdot b}\right)\\ \mathbf{elif}\;t \lt 3.036967103737246 \cdot 10^{-130}:\\ \;\;\;\;\frac{z}{b}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y}{t} \cdot b}\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if t < -1.728367153749501e-199 or 9.261783680345339e-292 < t

    1. Initial program 14.9

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    2. Using strategy rm
    3. Applied clear-num14.9

      \[\leadsto \frac{x + \color{blue}{\frac{1}{\frac{t}{y \cdot z}}}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    4. Using strategy rm
    5. Applied associate-/r*14.0

      \[\leadsto \frac{x + \frac{1}{\color{blue}{\frac{\frac{t}{y}}{z}}}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    6. Using strategy rm
    7. Applied clear-num14.0

      \[\leadsto \frac{x + \frac{1}{\frac{\frac{t}{y}}{z}}}{\left(a + 1.0\right) + \color{blue}{\frac{1}{\frac{t}{y \cdot b}}}}\]
    8. Simplified11.7

      \[\leadsto \frac{x + \frac{1}{\frac{\frac{t}{y}}{z}}}{\left(a + 1.0\right) + \frac{1}{\color{blue}{\frac{\frac{t}{y}}{b}}}}\]
    9. Using strategy rm
    10. Applied *-un-lft-identity11.7

      \[\leadsto \frac{x + \frac{1}{\frac{\frac{t}{y}}{z}}}{\color{blue}{1 \cdot \left(\left(a + 1.0\right) + \frac{1}{\frac{\frac{t}{y}}{b}}\right)}}\]
    11. Applied associate-/r*11.7

      \[\leadsto \color{blue}{\frac{\frac{x + \frac{1}{\frac{\frac{t}{y}}{z}}}{1}}{\left(a + 1.0\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}}\]
    12. Simplified11.9

      \[\leadsto \frac{\color{blue}{x + z \cdot \frac{1}{\frac{t}{y}}}}{\left(a + 1.0\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\]

    if -1.728367153749501e-199 < t < 9.261783680345339e-292

    1. Initial program 31.2

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    2. Using strategy rm
    3. Applied flip3-+42.2

      \[\leadsto \frac{x + \frac{y \cdot z}{t}}{\color{blue}{\frac{{a}^{3} + {1.0}^{3}}{a \cdot a + \left(1.0 \cdot 1.0 - a \cdot 1.0\right)}} + \frac{y \cdot b}{t}}\]
    4. Applied frac-add42.2

      \[\leadsto \frac{x + \frac{y \cdot z}{t}}{\color{blue}{\frac{\left({a}^{3} + {1.0}^{3}\right) \cdot t + \left(a \cdot a + \left(1.0 \cdot 1.0 - a \cdot 1.0\right)\right) \cdot \left(y \cdot b\right)}{\left(a \cdot a + \left(1.0 \cdot 1.0 - a \cdot 1.0\right)\right) \cdot t}}}\]
    5. Applied associate-/r/44.1

      \[\leadsto \color{blue}{\frac{x + \frac{y \cdot z}{t}}{\left({a}^{3} + {1.0}^{3}\right) \cdot t + \left(a \cdot a + \left(1.0 \cdot 1.0 - a \cdot 1.0\right)\right) \cdot \left(y \cdot b\right)} \cdot \left(\left(a \cdot a + \left(1.0 \cdot 1.0 - a \cdot 1.0\right)\right) \cdot t\right)}\]
    6. Simplified44.1

      \[\leadsto \color{blue}{\frac{\frac{z \cdot y}{t} + x}{\left(1.0 \cdot 1.0 + a \cdot \left(a - 1.0\right)\right) \cdot \left(b \cdot y\right) + \left(\left(a \cdot a\right) \cdot a + \left(1.0 \cdot 1.0\right) \cdot 1.0\right) \cdot t}} \cdot \left(\left(a \cdot a + \left(1.0 \cdot 1.0 - a \cdot 1.0\right)\right) \cdot t\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification15.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -1.728367153749501 \cdot 10^{-199}:\\ \;\;\;\;\frac{x + z \cdot \frac{1}{\frac{t}{y}}}{\left(1.0 + a\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\ \mathbf{elif}\;t \le 9.261783680345339 \cdot 10^{-292}:\\ \;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(1.0 \cdot 1.0 + a \cdot \left(a - 1.0\right)\right) \cdot \left(b \cdot y\right) + t \cdot \left(\left(1.0 \cdot 1.0\right) \cdot 1.0 + a \cdot \left(a \cdot a\right)\right)} \cdot \left(t \cdot \left(\left(1.0 \cdot 1.0 - a \cdot 1.0\right) + a \cdot a\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x + z \cdot \frac{1}{\frac{t}{y}}}{\left(1.0 + a\right) + \frac{1}{\frac{\frac{t}{y}}{b}}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019162 
(FPCore (x y z t a b)
  :name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"

  :herbie-target
  (if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b)))))))

  (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))