Average Error: 16.5 → 13.0
Time: 18.2s
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 -6.197177724958254 \cdot 10^{+148}:\\ \;\;\;\;\frac{x + \frac{y}{t} \cdot z}{\left(\frac{b}{t} \cdot y + a\right) + 1.0}\\ \mathbf{elif}\;t \le 2.3781837166761447 \cdot 10^{-60}:\\ \;\;\;\;\frac{\frac{y \cdot z}{t} + x}{\frac{y \cdot b}{t} + \left(a + 1.0\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y}{t} \cdot z}{\left(\frac{b}{t} \cdot y + a\right) + 1.0}\\ \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 -6.197177724958254 \cdot 10^{+148}:\\
\;\;\;\;\frac{x + \frac{y}{t} \cdot z}{\left(\frac{b}{t} \cdot y + a\right) + 1.0}\\

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

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r29433806 = x;
        double r29433807 = y;
        double r29433808 = z;
        double r29433809 = r29433807 * r29433808;
        double r29433810 = t;
        double r29433811 = r29433809 / r29433810;
        double r29433812 = r29433806 + r29433811;
        double r29433813 = a;
        double r29433814 = 1.0;
        double r29433815 = r29433813 + r29433814;
        double r29433816 = b;
        double r29433817 = r29433807 * r29433816;
        double r29433818 = r29433817 / r29433810;
        double r29433819 = r29433815 + r29433818;
        double r29433820 = r29433812 / r29433819;
        return r29433820;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r29433821 = t;
        double r29433822 = -6.197177724958254e+148;
        bool r29433823 = r29433821 <= r29433822;
        double r29433824 = x;
        double r29433825 = y;
        double r29433826 = r29433825 / r29433821;
        double r29433827 = z;
        double r29433828 = r29433826 * r29433827;
        double r29433829 = r29433824 + r29433828;
        double r29433830 = b;
        double r29433831 = r29433830 / r29433821;
        double r29433832 = r29433831 * r29433825;
        double r29433833 = a;
        double r29433834 = r29433832 + r29433833;
        double r29433835 = 1.0;
        double r29433836 = r29433834 + r29433835;
        double r29433837 = r29433829 / r29433836;
        double r29433838 = 2.3781837166761447e-60;
        bool r29433839 = r29433821 <= r29433838;
        double r29433840 = r29433825 * r29433827;
        double r29433841 = r29433840 / r29433821;
        double r29433842 = r29433841 + r29433824;
        double r29433843 = r29433825 * r29433830;
        double r29433844 = r29433843 / r29433821;
        double r29433845 = r29433833 + r29433835;
        double r29433846 = r29433844 + r29433845;
        double r29433847 = r29433842 / r29433846;
        double r29433848 = r29433839 ? r29433847 : r29433837;
        double r29433849 = r29433823 ? r29433837 : r29433848;
        return r29433849;
}

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
Herbie13.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 < -6.197177724958254e+148 or 2.3781837166761447e-60 < t

    1. Initial program 12.1

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    2. Simplified4.3

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

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

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

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

    if -6.197177724958254e+148 < t < 2.3781837166761447e-60

    1. Initial program 19.9

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

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

Reproduce

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