Average Error: 16.6 → 12.9
Time: 10.6s
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 r4069 = x;
        double r4070 = y;
        double r4071 = z;
        double r4072 = r4070 * r4071;
        double r4073 = t;
        double r4074 = r4072 / r4073;
        double r4075 = r4069 + r4074;
        double r4076 = a;
        double r4077 = 1.0;
        double r4078 = r4076 + r4077;
        double r4079 = b;
        double r4080 = r4070 * r4079;
        double r4081 = r4080 / r4073;
        double r4082 = r4078 + r4081;
        double r4083 = r4075 / r4082;
        return r4083;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r4084 = t;
        double r4085 = -2.036453930935145e-27;
        bool r4086 = r4084 <= r4085;
        double r4087 = 2.0111491653402853e+93;
        bool r4088 = r4084 <= r4087;
        double r4089 = !r4088;
        bool r4090 = r4086 || r4089;
        double r4091 = x;
        double r4092 = y;
        double r4093 = z;
        double r4094 = r4093 / r4084;
        double r4095 = r4092 * r4094;
        double r4096 = r4091 + r4095;
        double r4097 = 1.0;
        double r4098 = r4092 / r4084;
        double r4099 = b;
        double r4100 = a;
        double r4101 = 1.0;
        double r4102 = r4100 + r4101;
        double r4103 = fma(r4098, r4099, r4102);
        double r4104 = r4097 / r4103;
        double r4105 = r4096 * r4104;
        double r4106 = r4092 * r4093;
        double r4107 = r4084 / r4106;
        double r4108 = r4097 / r4107;
        double r4109 = r4091 + r4108;
        double r4110 = r4092 * r4099;
        double r4111 = r4110 / r4084;
        double r4112 = r4102 + r4111;
        double r4113 = r4109 / r4112;
        double r4114 = r4090 ? r4105 : r4113;
        return r4114;
}

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))))