Average Error: 16.6 → 12.9
Time: 24.2s
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 r546762 = x;
        double r546763 = y;
        double r546764 = z;
        double r546765 = r546763 * r546764;
        double r546766 = t;
        double r546767 = r546765 / r546766;
        double r546768 = r546762 + r546767;
        double r546769 = a;
        double r546770 = 1.0;
        double r546771 = r546769 + r546770;
        double r546772 = b;
        double r546773 = r546763 * r546772;
        double r546774 = r546773 / r546766;
        double r546775 = r546771 + r546774;
        double r546776 = r546768 / r546775;
        return r546776;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r546777 = t;
        double r546778 = -5.5686025887905015e-05;
        bool r546779 = r546777 <= r546778;
        double r546780 = 2.7330830182794247e-77;
        bool r546781 = r546777 <= r546780;
        double r546782 = !r546781;
        bool r546783 = r546779 || r546782;
        double r546784 = y;
        double r546785 = r546784 / r546777;
        double r546786 = z;
        double r546787 = x;
        double r546788 = fma(r546785, r546786, r546787);
        double r546789 = b;
        double r546790 = a;
        double r546791 = fma(r546785, r546789, r546790);
        double r546792 = 1.0;
        double r546793 = r546791 + r546792;
        double r546794 = r546788 / r546793;
        double r546795 = r546784 * r546786;
        double r546796 = r546795 / r546777;
        double r546797 = r546787 + r546796;
        double r546798 = r546790 + r546792;
        double r546799 = r546784 * r546789;
        double r546800 = r546799 / r546777;
        double r546801 = r546798 + r546800;
        double r546802 = r546797 / r546801;
        double r546803 = r546783 ? r546794 : r546802;
        return r546803;
}

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