\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;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 16.9 |
|---|---|
| Target | 13.2 |
| Herbie | 14.8 |
Initial program 16.9
Simplified14.8
Final simplification14.8
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))))