Average Error: 16.8 → 13.6
Time: 4.3s
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 -1.75785742273969681 \cdot 10^{-64} \lor \neg \left(t \le 9.46037676463272081 \cdot 10^{-118}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{\left(a + 1\right) + \frac{y \cdot b}{t}}{x + \frac{y \cdot z}{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 -1.75785742273969681 \cdot 10^{-64} \lor \neg \left(t \le 9.46037676463272081 \cdot 10^{-118}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r605609 = x;
        double r605610 = y;
        double r605611 = z;
        double r605612 = r605610 * r605611;
        double r605613 = t;
        double r605614 = r605612 / r605613;
        double r605615 = r605609 + r605614;
        double r605616 = a;
        double r605617 = 1.0;
        double r605618 = r605616 + r605617;
        double r605619 = b;
        double r605620 = r605610 * r605619;
        double r605621 = r605620 / r605613;
        double r605622 = r605618 + r605621;
        double r605623 = r605615 / r605622;
        return r605623;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r605624 = t;
        double r605625 = -1.7578574227396968e-64;
        bool r605626 = r605624 <= r605625;
        double r605627 = 9.46037676463272e-118;
        bool r605628 = r605624 <= r605627;
        double r605629 = !r605628;
        bool r605630 = r605626 || r605629;
        double r605631 = y;
        double r605632 = r605631 / r605624;
        double r605633 = z;
        double r605634 = x;
        double r605635 = fma(r605632, r605633, r605634);
        double r605636 = a;
        double r605637 = 1.0;
        double r605638 = r605636 + r605637;
        double r605639 = b;
        double r605640 = r605624 / r605639;
        double r605641 = r605631 / r605640;
        double r605642 = r605638 + r605641;
        double r605643 = r605635 / r605642;
        double r605644 = 1.0;
        double r605645 = r605631 * r605639;
        double r605646 = r605645 / r605624;
        double r605647 = r605638 + r605646;
        double r605648 = r605631 * r605633;
        double r605649 = r605648 / r605624;
        double r605650 = r605634 + r605649;
        double r605651 = r605647 / r605650;
        double r605652 = r605644 / r605651;
        double r605653 = r605630 ? r605643 : r605652;
        return r605653;
}

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

Target

Original16.8
Target13.1
Herbie13.6
\[\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 t < -1.7578574227396968e-64 or 9.46037676463272e-118 < t

    1. Initial program 12.0

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

      \[\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 *-un-lft-identity10.0

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

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

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

    if -1.7578574227396968e-64 < t < 9.46037676463272e-118

    1. Initial program 26.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -1.75785742273969681 \cdot 10^{-64} \lor \neg \left(t \le 9.46037676463272081 \cdot 10^{-118}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\left(a + 1\right) + \frac{y}{\frac{t}{b}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{\left(a + 1\right) + \frac{y \cdot b}{t}}{x + \frac{y \cdot z}{t}}}\\ \end{array}\]

Reproduce

herbie shell --seed 2020024 +o rules:numerics
(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))))