\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)} \cdot \mathsf{fma}\left(\frac{y}{t}, z, x\right)double f(double x, double y, double z, double t, double a, double b) {
double r787440 = x;
double r787441 = y;
double r787442 = z;
double r787443 = r787441 * r787442;
double r787444 = t;
double r787445 = r787443 / r787444;
double r787446 = r787440 + r787445;
double r787447 = a;
double r787448 = 1.0;
double r787449 = r787447 + r787448;
double r787450 = b;
double r787451 = r787441 * r787450;
double r787452 = r787451 / r787444;
double r787453 = r787449 + r787452;
double r787454 = r787446 / r787453;
return r787454;
}
double f(double x, double y, double z, double t, double a, double b) {
double r787455 = 1.0;
double r787456 = y;
double r787457 = t;
double r787458 = r787456 / r787457;
double r787459 = b;
double r787460 = a;
double r787461 = 1.0;
double r787462 = r787460 + r787461;
double r787463 = fma(r787458, r787459, r787462);
double r787464 = r787455 / r787463;
double r787465 = z;
double r787466 = x;
double r787467 = fma(r787458, r787465, r787466);
double r787468 = r787464 * r787467;
return r787468;
}




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.8 |
|---|---|
| Target | 13.4 |
| Herbie | 14.8 |
Initial program 16.8
rmApplied clear-num17.0
rmApplied *-un-lft-identity17.0
Applied associate-/r*17.0
Simplified16.5
rmApplied div-inv16.5
Applied add-cube-cbrt16.5
Applied times-frac16.4
Simplified16.4
Simplified14.8
Final simplification14.8
herbie shell --seed 2020002 +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))))