Average Error: 16.5 → 12.8
Time: 5.1s
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 -8.7367557214171316 \cdot 10^{-135} \lor \neg \left(t \le 1.1605883559318448 \cdot 10^{-119}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \left(y \cdot b\right) \cdot \frac{1}{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 -8.7367557214171316 \cdot 10^{-135} \lor \neg \left(t \le 1.1605883559318448 \cdot 10^{-119}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r635963 = x;
        double r635964 = y;
        double r635965 = z;
        double r635966 = r635964 * r635965;
        double r635967 = t;
        double r635968 = r635966 / r635967;
        double r635969 = r635963 + r635968;
        double r635970 = a;
        double r635971 = 1.0;
        double r635972 = r635970 + r635971;
        double r635973 = b;
        double r635974 = r635964 * r635973;
        double r635975 = r635974 / r635967;
        double r635976 = r635972 + r635975;
        double r635977 = r635969 / r635976;
        return r635977;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r635978 = t;
        double r635979 = -8.736755721417132e-135;
        bool r635980 = r635978 <= r635979;
        double r635981 = 1.1605883559318448e-119;
        bool r635982 = r635978 <= r635981;
        double r635983 = !r635982;
        bool r635984 = r635980 || r635983;
        double r635985 = y;
        double r635986 = r635985 / r635978;
        double r635987 = z;
        double r635988 = x;
        double r635989 = fma(r635986, r635987, r635988);
        double r635990 = b;
        double r635991 = a;
        double r635992 = 1.0;
        double r635993 = r635991 + r635992;
        double r635994 = fma(r635986, r635990, r635993);
        double r635995 = r635989 / r635994;
        double r635996 = r635985 * r635987;
        double r635997 = r635996 / r635978;
        double r635998 = r635988 + r635997;
        double r635999 = r635985 * r635990;
        double r636000 = 1.0;
        double r636001 = r636000 / r635978;
        double r636002 = r635999 * r636001;
        double r636003 = r635993 + r636002;
        double r636004 = r635998 / r636003;
        double r636005 = r635984 ? r635995 : r636004;
        return r636005;
}

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.5
Target12.9
Herbie12.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 < -8.736755721417132e-135 or 1.1605883559318448e-119 < t

    1. Initial program 12.3

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

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

      \[\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 associate-*r/10.2

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

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

    if -8.736755721417132e-135 < t < 1.1605883559318448e-119

    1. Initial program 27.5

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

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

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

Reproduce

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