Average Error: 16.0 → 13.1
Time: 16.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}\;y \le -3.309535570402011 \cdot 10^{-68}:\\ \;\;\;\;\frac{x + \frac{z}{t} \cdot y}{\left(1.0 + a\right) + \frac{b}{t} \cdot y}\\ \mathbf{elif}\;y \le 1.8936363334597205 \cdot 10^{-182}:\\ \;\;\;\;\frac{z \cdot \frac{y}{t} + x}{\left(1.0 + a\right) + \frac{b \cdot y}{t}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{z}{t} \cdot y}{\left(1.0 + a\right) + \frac{b}{t} \cdot y}\\ \end{array}\]
\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}
\begin{array}{l}
\mathbf{if}\;y \le -3.309535570402011 \cdot 10^{-68}:\\
\;\;\;\;\frac{x + \frac{z}{t} \cdot y}{\left(1.0 + a\right) + \frac{b}{t} \cdot y}\\

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

\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{z}{t} \cdot y}{\left(1.0 + a\right) + \frac{b}{t} \cdot y}\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r40718776 = x;
        double r40718777 = y;
        double r40718778 = z;
        double r40718779 = r40718777 * r40718778;
        double r40718780 = t;
        double r40718781 = r40718779 / r40718780;
        double r40718782 = r40718776 + r40718781;
        double r40718783 = a;
        double r40718784 = 1.0;
        double r40718785 = r40718783 + r40718784;
        double r40718786 = b;
        double r40718787 = r40718777 * r40718786;
        double r40718788 = r40718787 / r40718780;
        double r40718789 = r40718785 + r40718788;
        double r40718790 = r40718782 / r40718789;
        return r40718790;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r40718791 = y;
        double r40718792 = -3.309535570402011e-68;
        bool r40718793 = r40718791 <= r40718792;
        double r40718794 = x;
        double r40718795 = z;
        double r40718796 = t;
        double r40718797 = r40718795 / r40718796;
        double r40718798 = r40718797 * r40718791;
        double r40718799 = r40718794 + r40718798;
        double r40718800 = 1.0;
        double r40718801 = a;
        double r40718802 = r40718800 + r40718801;
        double r40718803 = b;
        double r40718804 = r40718803 / r40718796;
        double r40718805 = r40718804 * r40718791;
        double r40718806 = r40718802 + r40718805;
        double r40718807 = r40718799 / r40718806;
        double r40718808 = 1.8936363334597205e-182;
        bool r40718809 = r40718791 <= r40718808;
        double r40718810 = r40718791 / r40718796;
        double r40718811 = r40718795 * r40718810;
        double r40718812 = r40718811 + r40718794;
        double r40718813 = r40718803 * r40718791;
        double r40718814 = r40718813 / r40718796;
        double r40718815 = r40718802 + r40718814;
        double r40718816 = r40718812 / r40718815;
        double r40718817 = r40718809 ? r40718816 : r40718807;
        double r40718818 = r40718793 ? r40718807 : r40718817;
        return r40718818;
}

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.0
Target13.2
Herbie13.1
\[\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 y < -3.309535570402011e-68 or 1.8936363334597205e-182 < y

    1. Initial program 21.9

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

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

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

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

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

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

      \[\leadsto \frac{\frac{y}{\frac{t}{z}} + x}{\left(a + 1.0\right) + \color{blue}{y} \cdot \frac{b}{t}}\]
    10. Using strategy rm
    11. Applied div-inv17.8

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

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

    if -3.309535570402011e-68 < y < 1.8936363334597205e-182

    1. Initial program 2.4

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity2.4

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

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

      \[\leadsto \frac{\color{blue}{\frac{y}{\frac{t}{z}} + x}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    6. Using strategy rm
    7. Applied associate-/r/2.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -3.309535570402011 \cdot 10^{-68}:\\ \;\;\;\;\frac{x + \frac{z}{t} \cdot y}{\left(1.0 + a\right) + \frac{b}{t} \cdot y}\\ \mathbf{elif}\;y \le 1.8936363334597205 \cdot 10^{-182}:\\ \;\;\;\;\frac{z \cdot \frac{y}{t} + x}{\left(1.0 + a\right) + \frac{b \cdot y}{t}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{z}{t} \cdot y}{\left(1.0 + a\right) + \frac{b}{t} \cdot y}\\ \end{array}\]

Reproduce

herbie shell --seed 2019163 
(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))))