Average Error: 16.6 → 12.9
Time: 4.9s
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 -2.0364539309351452 \cdot 10^{-27} \lor \neg \left(t \le 2.0111491653402853 \cdot 10^{93}\right):\\ \;\;\;\;\left(x + y \cdot \frac{z}{t}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{1}{\frac{t}{y \cdot z}}}{\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 -2.0364539309351452 \cdot 10^{-27} \lor \neg \left(t \le 2.0111491653402853 \cdot 10^{93}\right):\\
\;\;\;\;\left(x + y \cdot \frac{z}{t}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\

\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\frac{t}{y \cdot z}}}{\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 r974519 = x;
        double r974520 = y;
        double r974521 = z;
        double r974522 = r974520 * r974521;
        double r974523 = t;
        double r974524 = r974522 / r974523;
        double r974525 = r974519 + r974524;
        double r974526 = a;
        double r974527 = 1.0;
        double r974528 = r974526 + r974527;
        double r974529 = b;
        double r974530 = r974520 * r974529;
        double r974531 = r974530 / r974523;
        double r974532 = r974528 + r974531;
        double r974533 = r974525 / r974532;
        return r974533;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r974534 = t;
        double r974535 = -2.036453930935145e-27;
        bool r974536 = r974534 <= r974535;
        double r974537 = 2.0111491653402853e+93;
        bool r974538 = r974534 <= r974537;
        double r974539 = !r974538;
        bool r974540 = r974536 || r974539;
        double r974541 = x;
        double r974542 = y;
        double r974543 = z;
        double r974544 = r974543 / r974534;
        double r974545 = r974542 * r974544;
        double r974546 = r974541 + r974545;
        double r974547 = 1.0;
        double r974548 = r974542 / r974534;
        double r974549 = b;
        double r974550 = a;
        double r974551 = 1.0;
        double r974552 = r974550 + r974551;
        double r974553 = fma(r974548, r974549, r974552);
        double r974554 = r974547 / r974553;
        double r974555 = r974546 * r974554;
        double r974556 = r974542 * r974543;
        double r974557 = r974534 / r974556;
        double r974558 = r974547 / r974557;
        double r974559 = r974541 + r974558;
        double r974560 = r974542 * r974549;
        double r974561 = r974560 / r974534;
        double r974562 = r974552 + r974561;
        double r974563 = r974559 / r974562;
        double r974564 = r974540 ? r974555 : r974563;
        return r974564;
}

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.6
Target13.4
Herbie12.9
\[\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 < -2.036453930935145e-27 or 2.0111491653402853e+93 < t

    1. Initial program 11.5

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

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

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

      \[\leadsto \left(x + \frac{y \cdot z}{\color{blue}{1 \cdot t}}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\]
    7. Applied times-frac3.5

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

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

    if -2.036453930935145e-27 < t < 2.0111491653402853e+93

    1. Initial program 20.9

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

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

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

Reproduce

herbie shell --seed 2020025 +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))))