Average Error: 16.4 → 14.5
Time: 4.7s
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 3.834895060413277958924619445076940887487 \cdot 10^{-32}:\\ \;\;\;\;\frac{x + \frac{1}{\frac{t}{y \cdot z}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\ \mathbf{else}:\\ \;\;\;\;{\left(\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\right)}^{1}\\ \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 3.834895060413277958924619445076940887487 \cdot 10^{-32}:\\
\;\;\;\;\frac{x + \frac{1}{\frac{t}{y \cdot z}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r832933 = x;
        double r832934 = y;
        double r832935 = z;
        double r832936 = r832934 * r832935;
        double r832937 = t;
        double r832938 = r832936 / r832937;
        double r832939 = r832933 + r832938;
        double r832940 = a;
        double r832941 = 1.0;
        double r832942 = r832940 + r832941;
        double r832943 = b;
        double r832944 = r832934 * r832943;
        double r832945 = r832944 / r832937;
        double r832946 = r832942 + r832945;
        double r832947 = r832939 / r832946;
        return r832947;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r832948 = t;
        double r832949 = 3.834895060413278e-32;
        bool r832950 = r832948 <= r832949;
        double r832951 = x;
        double r832952 = 1.0;
        double r832953 = y;
        double r832954 = z;
        double r832955 = r832953 * r832954;
        double r832956 = r832948 / r832955;
        double r832957 = r832952 / r832956;
        double r832958 = r832951 + r832957;
        double r832959 = a;
        double r832960 = 1.0;
        double r832961 = r832959 + r832960;
        double r832962 = b;
        double r832963 = r832953 * r832962;
        double r832964 = r832963 / r832948;
        double r832965 = r832961 + r832964;
        double r832966 = r832958 / r832965;
        double r832967 = r832954 / r832948;
        double r832968 = fma(r832967, r832953, r832951);
        double r832969 = r832953 / r832948;
        double r832970 = fma(r832969, r832962, r832961);
        double r832971 = r832968 / r832970;
        double r832972 = pow(r832971, r832952);
        double r832973 = r832950 ? r832966 : r832972;
        return r832973;
}

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.4
Target13.5
Herbie14.5
\[\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 < 3.834895060413278e-32

    1. Initial program 18.3

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

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

    if 3.834895060413278e-32 < t

    1. Initial program 11.6

      \[\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 \frac{x + \color{blue}{\left(y \cdot z\right) \cdot \frac{1}{t}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
    4. Using strategy rm
    5. Applied div-inv11.7

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

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

      \[\leadsto \color{blue}{{\left(x + \left(y \cdot z\right) \cdot \frac{1}{t}\right)}^{1}} \cdot {\left(\frac{1}{\left(a + 1\right) + \frac{y \cdot b}{t}}\right)}^{1}\]
    9. Applied pow-prod-down11.7

      \[\leadsto \color{blue}{{\left(\left(x + \left(y \cdot z\right) \cdot \frac{1}{t}\right) \cdot \frac{1}{\left(a + 1\right) + \frac{y \cdot b}{t}}\right)}^{1}}\]
    10. Simplified5.0

      \[\leadsto {\color{blue}{\left(\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\right)}}^{1}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification14.5

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

Reproduce

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