Average Error: 16.9 → 13.8
Time: 7.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 -6.1483665754079292 \cdot 10^{144} \lor \neg \left(t \le 408.529868483533221\right):\\ \;\;\;\;\left(x + \frac{y}{\frac{t}{z}}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\ \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 -6.1483665754079292 \cdot 10^{144} \lor \neg \left(t \le 408.529868483533221\right):\\
\;\;\;\;\left(x + \frac{y}{\frac{t}{z}}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\

\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 r572323 = x;
        double r572324 = y;
        double r572325 = z;
        double r572326 = r572324 * r572325;
        double r572327 = t;
        double r572328 = r572326 / r572327;
        double r572329 = r572323 + r572328;
        double r572330 = a;
        double r572331 = 1.0;
        double r572332 = r572330 + r572331;
        double r572333 = b;
        double r572334 = r572324 * r572333;
        double r572335 = r572334 / r572327;
        double r572336 = r572332 + r572335;
        double r572337 = r572329 / r572336;
        return r572337;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r572338 = t;
        double r572339 = -6.148366575407929e+144;
        bool r572340 = r572338 <= r572339;
        double r572341 = 408.5298684835332;
        bool r572342 = r572338 <= r572341;
        double r572343 = !r572342;
        bool r572344 = r572340 || r572343;
        double r572345 = x;
        double r572346 = y;
        double r572347 = z;
        double r572348 = r572338 / r572347;
        double r572349 = r572346 / r572348;
        double r572350 = r572345 + r572349;
        double r572351 = 1.0;
        double r572352 = r572346 / r572338;
        double r572353 = b;
        double r572354 = a;
        double r572355 = 1.0;
        double r572356 = r572354 + r572355;
        double r572357 = fma(r572352, r572353, r572356);
        double r572358 = r572351 / r572357;
        double r572359 = r572350 * r572358;
        double r572360 = r572346 * r572353;
        double r572361 = r572360 / r572338;
        double r572362 = r572356 + r572361;
        double r572363 = r572346 * r572347;
        double r572364 = r572363 / r572338;
        double r572365 = r572345 + r572364;
        double r572366 = r572362 / r572365;
        double r572367 = r572351 / r572366;
        double r572368 = r572344 ? r572359 : r572367;
        return r572368;
}

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.9
Target12.8
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 t < -6.148366575407929e+144 or 408.5298684835332 < 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 associate-/l*7.5

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

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

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

    if -6.148366575407929e+144 < t < 408.5298684835332

    1. Initial program 20.5

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

      \[\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.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -6.1483665754079292 \cdot 10^{144} \lor \neg \left(t \le 408.529868483533221\right):\\ \;\;\;\;\left(x + \frac{y}{\frac{t}{z}}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\ \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 2020034 +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))))