Average Error: 16.1 → 12.5
Time: 4.4s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
\[\begin{array}{l} \mathbf{if}\;t \le -7.913399165461686155144823271089923942095 \cdot 10^{-52} \lor \neg \left(t \le 7.626406460332817234650012490007590154937 \cdot 10^{-81}\right):\\ \;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \left(y \cdot z\right) \cdot \frac{1}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\ \end{array}\]
\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}
\begin{array}{l}
\mathbf{if}\;t \le -7.913399165461686155144823271089923942095 \cdot 10^{-52} \lor \neg \left(t \le 7.626406460332817234650012490007590154937 \cdot 10^{-81}\right):\\
\;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r721576 = x;
        double r721577 = y;
        double r721578 = z;
        double r721579 = r721577 * r721578;
        double r721580 = t;
        double r721581 = r721579 / r721580;
        double r721582 = r721576 + r721581;
        double r721583 = a;
        double r721584 = 1.0;
        double r721585 = r721583 + r721584;
        double r721586 = b;
        double r721587 = r721577 * r721586;
        double r721588 = r721587 / r721580;
        double r721589 = r721585 + r721588;
        double r721590 = r721582 / r721589;
        return r721590;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r721591 = t;
        double r721592 = -7.913399165461686e-52;
        bool r721593 = r721591 <= r721592;
        double r721594 = 7.626406460332817e-81;
        bool r721595 = r721591 <= r721594;
        double r721596 = !r721595;
        bool r721597 = r721593 || r721596;
        double r721598 = x;
        double r721599 = y;
        double r721600 = z;
        double r721601 = r721600 / r721591;
        double r721602 = r721599 * r721601;
        double r721603 = r721598 + r721602;
        double r721604 = a;
        double r721605 = 1.0;
        double r721606 = r721604 + r721605;
        double r721607 = b;
        double r721608 = r721607 / r721591;
        double r721609 = r721599 * r721608;
        double r721610 = r721606 + r721609;
        double r721611 = r721603 / r721610;
        double r721612 = r721599 * r721600;
        double r721613 = 1.0;
        double r721614 = r721613 / r721591;
        double r721615 = r721612 * r721614;
        double r721616 = r721598 + r721615;
        double r721617 = r721599 * r721607;
        double r721618 = r721617 / r721591;
        double r721619 = r721606 + r721618;
        double r721620 = r721616 / r721619;
        double r721621 = r721597 ? r721611 : r721620;
        return r721621;
}

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.1
Target12.9
Herbie12.5
\[\begin{array}{l} \mathbf{if}\;t \lt -1.365908536631008841640163147697088508132 \cdot 10^{-271}:\\ \;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1\right) + \frac{y}{t} \cdot b}\right)\\ \mathbf{elif}\;t \lt 3.036967103737245906066829435890093573122 \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\right) + \frac{y}{t} \cdot b}\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if t < -7.913399165461686e-52 or 7.626406460332817e-81 < t

    1. Initial program 11.1

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

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

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

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

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

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

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

    if -7.913399165461686e-52 < t < 7.626406460332817e-81

    1. Initial program 24.4

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
    2. Using strategy rm
    3. Applied div-inv24.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -7.913399165461686155144823271089923942095 \cdot 10^{-52} \lor \neg \left(t \le 7.626406460332817234650012490007590154937 \cdot 10^{-81}\right):\\ \;\;\;\;\frac{x + y \cdot \frac{z}{t}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \left(y \cdot z\right) \cdot \frac{1}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\ \end{array}\]

Reproduce

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