Average Error: 16.6 → 12.9
Time: 23.3s
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 -5.568602588790501459366233394376877186005 \cdot 10^{-5} \lor \neg \left(t \le 2.733083018279424726772211123917991343589 \cdot 10^{-77}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\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 -5.568602588790501459366233394376877186005 \cdot 10^{-5} \lor \neg \left(t \le 2.733083018279424726772211123917991343589 \cdot 10^{-77}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}\\

\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\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 r1136045 = x;
        double r1136046 = y;
        double r1136047 = z;
        double r1136048 = r1136046 * r1136047;
        double r1136049 = t;
        double r1136050 = r1136048 / r1136049;
        double r1136051 = r1136045 + r1136050;
        double r1136052 = a;
        double r1136053 = 1.0;
        double r1136054 = r1136052 + r1136053;
        double r1136055 = b;
        double r1136056 = r1136046 * r1136055;
        double r1136057 = r1136056 / r1136049;
        double r1136058 = r1136054 + r1136057;
        double r1136059 = r1136051 / r1136058;
        return r1136059;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r1136060 = t;
        double r1136061 = -5.5686025887905015e-05;
        bool r1136062 = r1136060 <= r1136061;
        double r1136063 = 2.7330830182794247e-77;
        bool r1136064 = r1136060 <= r1136063;
        double r1136065 = !r1136064;
        bool r1136066 = r1136062 || r1136065;
        double r1136067 = y;
        double r1136068 = r1136067 / r1136060;
        double r1136069 = z;
        double r1136070 = x;
        double r1136071 = fma(r1136068, r1136069, r1136070);
        double r1136072 = b;
        double r1136073 = a;
        double r1136074 = fma(r1136068, r1136072, r1136073);
        double r1136075 = 1.0;
        double r1136076 = r1136074 + r1136075;
        double r1136077 = r1136071 / r1136076;
        double r1136078 = r1136067 * r1136069;
        double r1136079 = r1136078 / r1136060;
        double r1136080 = r1136070 + r1136079;
        double r1136081 = r1136073 + r1136075;
        double r1136082 = r1136067 * r1136072;
        double r1136083 = r1136082 / r1136060;
        double r1136084 = r1136081 + r1136083;
        double r1136085 = r1136080 / r1136084;
        double r1136086 = r1136066 ? r1136077 : r1136085;
        return r1136086;
}

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.5
Herbie12.9
\[\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 < -5.5686025887905015e-05 or 2.7330830182794247e-77 < t

    1. Initial program 12.1

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

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

    if -5.5686025887905015e-05 < t < 2.7330830182794247e-77

    1. Initial program 22.8

      \[\frac{x + \frac{y \cdot z}{t}}{\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 -5.568602588790501459366233394376877186005 \cdot 10^{-5} \lor \neg \left(t \le 2.733083018279424726772211123917991343589 \cdot 10^{-77}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019303 +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.0369671037372459e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))

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