Average Error: 16.6 → 13.4
Time: 18.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 -4.704199613199595150215299647249448877711 \cdot 10^{111} \lor \neg \left(t \le 1.762388146479538961600229227290375791756 \cdot 10^{-51}\right):\\ \;\;\;\;\frac{1}{\frac{1}{\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y \cdot 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}\;t \le -4.704199613199595150215299647249448877711 \cdot 10^{111} \lor \neg \left(t \le 1.762388146479538961600229227290375791756 \cdot 10^{-51}\right):\\
\;\;\;\;\frac{1}{\frac{1}{\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}}}\\

\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y \cdot 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 r555356 = x;
        double r555357 = y;
        double r555358 = z;
        double r555359 = r555357 * r555358;
        double r555360 = t;
        double r555361 = r555359 / r555360;
        double r555362 = r555356 + r555361;
        double r555363 = a;
        double r555364 = 1.0;
        double r555365 = r555363 + r555364;
        double r555366 = b;
        double r555367 = r555357 * r555366;
        double r555368 = r555367 / r555360;
        double r555369 = r555365 + r555368;
        double r555370 = r555362 / r555369;
        return r555370;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r555371 = t;
        double r555372 = -4.704199613199595e+111;
        bool r555373 = r555371 <= r555372;
        double r555374 = 1.762388146479539e-51;
        bool r555375 = r555371 <= r555374;
        double r555376 = !r555375;
        bool r555377 = r555373 || r555376;
        double r555378 = 1.0;
        double r555379 = z;
        double r555380 = r555379 / r555371;
        double r555381 = y;
        double r555382 = x;
        double r555383 = fma(r555380, r555381, r555382);
        double r555384 = r555381 / r555371;
        double r555385 = b;
        double r555386 = a;
        double r555387 = fma(r555384, r555385, r555386);
        double r555388 = 1.0;
        double r555389 = r555387 + r555388;
        double r555390 = r555383 / r555389;
        double r555391 = r555378 / r555390;
        double r555392 = r555378 / r555391;
        double r555393 = r555381 * r555379;
        double r555394 = r555393 / r555371;
        double r555395 = r555382 + r555394;
        double r555396 = r555386 + r555388;
        double r555397 = r555381 * r555385;
        double r555398 = r555397 / r555371;
        double r555399 = r555396 + r555398;
        double r555400 = r555395 / r555399;
        double r555401 = r555377 ? r555392 : r555400;
        return r555401;
}

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.2
Herbie13.4
\[\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 < -4.704199613199595e+111 or 1.762388146479539e-51 < t

    1. Initial program 11.3

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
    2. Simplified4.0

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}}\]
    3. Using strategy rm
    4. Applied clear-num4.3

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

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

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

    if -4.704199613199595e+111 < t < 1.762388146479539e-51

    1. Initial program 21.0

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

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

Reproduce

herbie shell --seed 2019208 +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.0369671037372459e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))

  (/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))