Average Error: 16.0 → 12.8
Time: 28.9s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -1.726406946855666 \cdot 10^{+238}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1.0\right)}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -3.5988201205288123 \cdot 10^{-178}:\\ \;\;\;\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 1.3135635701590148 \cdot 10^{-257}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1.0\right)}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 7.061941886181377 \cdot 10^{+145}:\\ \;\;\;\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1.0\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}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -1.726406946855666 \cdot 10^{+238}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1.0\right)}\\

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

\mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 1.3135635701590148 \cdot 10^{-257}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1.0\right)}\\

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

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r30235419 = x;
        double r30235420 = y;
        double r30235421 = z;
        double r30235422 = r30235420 * r30235421;
        double r30235423 = t;
        double r30235424 = r30235422 / r30235423;
        double r30235425 = r30235419 + r30235424;
        double r30235426 = a;
        double r30235427 = 1.0;
        double r30235428 = r30235426 + r30235427;
        double r30235429 = b;
        double r30235430 = r30235420 * r30235429;
        double r30235431 = r30235430 / r30235423;
        double r30235432 = r30235428 + r30235431;
        double r30235433 = r30235425 / r30235432;
        return r30235433;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r30235434 = z;
        double r30235435 = y;
        double r30235436 = r30235434 * r30235435;
        double r30235437 = t;
        double r30235438 = r30235436 / r30235437;
        double r30235439 = x;
        double r30235440 = r30235438 + r30235439;
        double r30235441 = b;
        double r30235442 = r30235441 * r30235435;
        double r30235443 = r30235442 / r30235437;
        double r30235444 = a;
        double r30235445 = 1.0;
        double r30235446 = r30235444 + r30235445;
        double r30235447 = r30235443 + r30235446;
        double r30235448 = r30235440 / r30235447;
        double r30235449 = -1.726406946855666e+238;
        bool r30235450 = r30235448 <= r30235449;
        double r30235451 = r30235434 / r30235437;
        double r30235452 = fma(r30235451, r30235435, r30235439);
        double r30235453 = r30235441 / r30235437;
        double r30235454 = fma(r30235435, r30235453, r30235446);
        double r30235455 = r30235452 / r30235454;
        double r30235456 = -3.5988201205288123e-178;
        bool r30235457 = r30235448 <= r30235456;
        double r30235458 = 1.3135635701590148e-257;
        bool r30235459 = r30235448 <= r30235458;
        double r30235460 = 7.061941886181377e+145;
        bool r30235461 = r30235448 <= r30235460;
        double r30235462 = r30235461 ? r30235448 : r30235455;
        double r30235463 = r30235459 ? r30235455 : r30235462;
        double r30235464 = r30235457 ? r30235448 : r30235463;
        double r30235465 = r30235450 ? r30235455 : r30235464;
        return r30235465;
}

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.0
Target13.2
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.0\right) + \frac{y}{t} \cdot b}\right)\\ \mathbf{elif}\;t \lt 3.036967103737246 \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.0\right) + \frac{y}{t} \cdot b}\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -1.726406946855666e+238 or -3.5988201205288123e-178 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 1.3135635701590148e-257 or 7.061941886181377e+145 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t)))

    1. Initial program 31.9

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

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

    if -1.726406946855666e+238 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -3.5988201205288123e-178 or 1.3135635701590148e-257 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 7.061941886181377e+145

    1. Initial program 0.3

      \[\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 simplification12.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -1.726406946855666 \cdot 10^{+238}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1.0\right)}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -3.5988201205288123 \cdot 10^{-178}:\\ \;\;\;\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 1.3135635701590148 \cdot 10^{-257}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1.0\right)}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 7.061941886181377 \cdot 10^{+145}:\\ \;\;\;\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1.0\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019163 +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 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b)))))))

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