Average Error: 16.9 → 14.8
Time: 22.3s
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\right) + 1}\]
\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\right) + 1}
double f(double x, double y, double z, double t, double a, double b) {
        double r490887 = x;
        double r490888 = y;
        double r490889 = z;
        double r490890 = r490888 * r490889;
        double r490891 = t;
        double r490892 = r490890 / r490891;
        double r490893 = r490887 + r490892;
        double r490894 = a;
        double r490895 = 1.0;
        double r490896 = r490894 + r490895;
        double r490897 = b;
        double r490898 = r490888 * r490897;
        double r490899 = r490898 / r490891;
        double r490900 = r490896 + r490899;
        double r490901 = r490893 / r490900;
        return r490901;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r490902 = y;
        double r490903 = t;
        double r490904 = r490902 / r490903;
        double r490905 = z;
        double r490906 = x;
        double r490907 = fma(r490904, r490905, r490906);
        double r490908 = b;
        double r490909 = a;
        double r490910 = fma(r490904, r490908, r490909);
        double r490911 = 1.0;
        double r490912 = r490910 + r490911;
        double r490913 = r490907 / r490912;
        return r490913;
}

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.2
Herbie14.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\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.9

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

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

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

Reproduce

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