\frac{x}{y - z \cdot t}\frac{x}{\mathsf{fma}\left(-t, z, y\right)}double f(double x, double y, double z, double t) {
double r647054 = x;
double r647055 = y;
double r647056 = z;
double r647057 = t;
double r647058 = r647056 * r647057;
double r647059 = r647055 - r647058;
double r647060 = r647054 / r647059;
return r647060;
}
double f(double x, double y, double z, double t) {
double r647061 = x;
double r647062 = t;
double r647063 = -r647062;
double r647064 = z;
double r647065 = y;
double r647066 = fma(r647063, r647064, r647065);
double r647067 = r647061 / r647066;
return r647067;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 2.7 |
|---|---|
| Target | 1.6 |
| Herbie | 2.7 |
Initial program 2.7
rmApplied add-cube-cbrt3.3
Applied prod-diff8.7
Simplified8.2
Simplified2.7
Final simplification2.7
herbie shell --seed 2019304 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:herbie-target
(if (< x -1.618195973607049e50) (/ 1 (- (/ y x) (* (/ z x) t))) (if (< x 2.13783064348764444e131) (/ x (- y (* z t))) (/ 1 (- (/ y x) (* (/ z x) t)))))
(/ x (- y (* z t))))