Average Error: 16.8 → 13.8
Time: 3.8s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
\[\begin{array}{l} \mathbf{if}\;z \le -4.4005240874132211 \cdot 10^{-116} \lor \neg \left(z \le 1.12880810670166501 \cdot 10^{-262}\right):\\ \;\;\;\;\frac{x + \frac{1}{\frac{\frac{t}{y}}{z}}}{\left(a + 1\right) + \frac{y}{t} \cdot b}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + y \cdot \frac{z}{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}\;z \le -4.4005240874132211 \cdot 10^{-116} \lor \neg \left(z \le 1.12880810670166501 \cdot 10^{-262}\right):\\
\;\;\;\;\frac{x + \frac{1}{\frac{\frac{t}{y}}{z}}}{\left(a + 1\right) + \frac{y}{t} \cdot b}\\

\mathbf{else}:\\
\;\;\;\;\frac{x + y \cdot \frac{z}{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 r744605 = x;
        double r744606 = y;
        double r744607 = z;
        double r744608 = r744606 * r744607;
        double r744609 = t;
        double r744610 = r744608 / r744609;
        double r744611 = r744605 + r744610;
        double r744612 = a;
        double r744613 = 1.0;
        double r744614 = r744612 + r744613;
        double r744615 = b;
        double r744616 = r744606 * r744615;
        double r744617 = r744616 / r744609;
        double r744618 = r744614 + r744617;
        double r744619 = r744611 / r744618;
        return r744619;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r744620 = z;
        double r744621 = -4.400524087413221e-116;
        bool r744622 = r744620 <= r744621;
        double r744623 = 1.128808106701665e-262;
        bool r744624 = r744620 <= r744623;
        double r744625 = !r744624;
        bool r744626 = r744622 || r744625;
        double r744627 = x;
        double r744628 = 1.0;
        double r744629 = t;
        double r744630 = y;
        double r744631 = r744629 / r744630;
        double r744632 = r744631 / r744620;
        double r744633 = r744628 / r744632;
        double r744634 = r744627 + r744633;
        double r744635 = a;
        double r744636 = 1.0;
        double r744637 = r744635 + r744636;
        double r744638 = r744630 / r744629;
        double r744639 = b;
        double r744640 = r744638 * r744639;
        double r744641 = r744637 + r744640;
        double r744642 = r744634 / r744641;
        double r744643 = r744620 / r744629;
        double r744644 = r744630 * r744643;
        double r744645 = r744627 + r744644;
        double r744646 = r744630 * r744639;
        double r744647 = r744646 / r744629;
        double r744648 = r744637 + r744647;
        double r744649 = r744645 / r744648;
        double r744650 = r744626 ? r744642 : r744649;
        return r744650;
}

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.8
Target13.6
Herbie13.8
\[\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\right) + \frac{y}{t} \cdot b}\right)\\ \mathbf{elif}\;t \lt 3.0369671037372459 \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 z < -4.400524087413221e-116 or 1.128808106701665e-262 < z

    1. Initial program 19.3

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

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

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

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

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

    if -4.400524087413221e-116 < z < 1.128808106701665e-262

    1. Initial program 7.4

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

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

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

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

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

Reproduce

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