Average Error: 16.9 → 13.5
Time: 59.0s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
\[\begin{array}{l} \mathbf{if}\;t \le -5.1119206130188347 \cdot 10^{+148}:\\ \;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, 1.0 + a\right)} \cdot \mathsf{fma}\left(\frac{y}{t}, z, x\right)\\ \mathbf{elif}\;t \le 5.296699501987463 \cdot 10^{+88}:\\ \;\;\;\;\frac{\frac{y \cdot z}{t} + x}{\frac{y \cdot b}{t} + \left(1.0 + a\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, 1.0 + a\right)} \cdot \mathsf{fma}\left(\frac{y}{t}, z, x\right)\\ \end{array}\]
\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}
\begin{array}{l}
\mathbf{if}\;t \le -5.1119206130188347 \cdot 10^{+148}:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, 1.0 + a\right)} \cdot \mathsf{fma}\left(\frac{y}{t}, z, x\right)\\

\mathbf{elif}\;t \le 5.296699501987463 \cdot 10^{+88}:\\
\;\;\;\;\frac{\frac{y \cdot z}{t} + x}{\frac{y \cdot b}{t} + \left(1.0 + a\right)}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r33057151 = x;
        double r33057152 = y;
        double r33057153 = z;
        double r33057154 = r33057152 * r33057153;
        double r33057155 = t;
        double r33057156 = r33057154 / r33057155;
        double r33057157 = r33057151 + r33057156;
        double r33057158 = a;
        double r33057159 = 1.0;
        double r33057160 = r33057158 + r33057159;
        double r33057161 = b;
        double r33057162 = r33057152 * r33057161;
        double r33057163 = r33057162 / r33057155;
        double r33057164 = r33057160 + r33057163;
        double r33057165 = r33057157 / r33057164;
        return r33057165;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r33057166 = t;
        double r33057167 = -5.1119206130188347e+148;
        bool r33057168 = r33057166 <= r33057167;
        double r33057169 = 1.0;
        double r33057170 = y;
        double r33057171 = r33057170 / r33057166;
        double r33057172 = b;
        double r33057173 = 1.0;
        double r33057174 = a;
        double r33057175 = r33057173 + r33057174;
        double r33057176 = fma(r33057171, r33057172, r33057175);
        double r33057177 = r33057169 / r33057176;
        double r33057178 = z;
        double r33057179 = x;
        double r33057180 = fma(r33057171, r33057178, r33057179);
        double r33057181 = r33057177 * r33057180;
        double r33057182 = 5.296699501987463e+88;
        bool r33057183 = r33057166 <= r33057182;
        double r33057184 = r33057170 * r33057178;
        double r33057185 = r33057184 / r33057166;
        double r33057186 = r33057185 + r33057179;
        double r33057187 = r33057170 * r33057172;
        double r33057188 = r33057187 / r33057166;
        double r33057189 = r33057188 + r33057175;
        double r33057190 = r33057186 / r33057189;
        double r33057191 = r33057183 ? r33057190 : r33057181;
        double r33057192 = r33057168 ? r33057181 : r33057191;
        return r33057192;
}

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
Target13.3
Herbie13.5
\[\begin{array}{l} \mathbf{if}\;t \lt -1.3659085366310088 \cdot 10^{-271}:\\ \;\;\;\;1.0 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1.0}{\left(a + 1.0\right) + \frac{y}{t} \cdot b}\right)\\ \mathbf{elif}\;t \lt 3.036967103737246 \cdot 10^{-130}:\\ \;\;\;\;\frac{z}{b}\\ \mathbf{else}:\\ \;\;\;\;1.0 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1.0}{\left(a + 1.0\right) + \frac{y}{t} \cdot b}\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if t < -5.1119206130188347e+148 or 5.296699501987463e+88 < t

    1. Initial program 12.6

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    2. Simplified1.9

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

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

    if -5.1119206130188347e+148 < t < 5.296699501987463e+88

    1. Initial program 18.9

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

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

Reproduce

herbie shell --seed 2019165 +o rules:numerics
(FPCore (x y z t a b)
  :name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"

  :herbie-target
  (if (< t -1.3659085366310088e-271) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b)))))))

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