Average Error: 16.6 → 14.6
Time: 4.7s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
\[\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\]
\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}
\frac{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}
double f(double x, double y, double z, double t, double a, double b) {
        double r737147 = x;
        double r737148 = y;
        double r737149 = z;
        double r737150 = r737148 * r737149;
        double r737151 = t;
        double r737152 = r737150 / r737151;
        double r737153 = r737147 + r737152;
        double r737154 = a;
        double r737155 = 1.0;
        double r737156 = r737154 + r737155;
        double r737157 = b;
        double r737158 = r737148 * r737157;
        double r737159 = r737158 / r737151;
        double r737160 = r737156 + r737159;
        double r737161 = r737153 / r737160;
        return r737161;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r737162 = y;
        double r737163 = t;
        double r737164 = r737162 / r737163;
        double r737165 = z;
        double r737166 = x;
        double r737167 = fma(r737164, r737165, r737166);
        double r737168 = b;
        double r737169 = a;
        double r737170 = 1.0;
        double r737171 = r737169 + r737170;
        double r737172 = fma(r737164, r737168, r737171);
        double r737173 = r737167 / r737172;
        return r737173;
}

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
Herbie14.6
\[\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. Initial program 16.6

    \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
  2. Using strategy rm
  3. Applied div-inv16.7

    \[\leadsto \color{blue}{\left(x + \frac{y \cdot z}{t}\right) \cdot \frac{1}{\left(a + 1\right) + \frac{y \cdot b}{t}}}\]
  4. Using strategy rm
  5. Applied pow116.7

    \[\leadsto \left(x + \frac{y \cdot z}{t}\right) \cdot \color{blue}{{\left(\frac{1}{\left(a + 1\right) + \frac{y \cdot b}{t}}\right)}^{1}}\]
  6. Applied pow116.7

    \[\leadsto \color{blue}{{\left(x + \frac{y \cdot z}{t}\right)}^{1}} \cdot {\left(\frac{1}{\left(a + 1\right) + \frac{y \cdot b}{t}}\right)}^{1}\]
  7. Applied pow-prod-down16.7

    \[\leadsto \color{blue}{{\left(\left(x + \frac{y \cdot z}{t}\right) \cdot \frac{1}{\left(a + 1\right) + \frac{y \cdot b}{t}}\right)}^{1}}\]
  8. Simplified14.6

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

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

Reproduce

herbie shell --seed 2020027 +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))))