\frac{x - y \cdot z}{t - a \cdot z}\frac{\mathsf{fma}\left(z, y, -x\right)}{\mathsf{fma}\left(z, a, -t\right)}double f(double x, double y, double z, double t, double a) {
double r639297 = x;
double r639298 = y;
double r639299 = z;
double r639300 = r639298 * r639299;
double r639301 = r639297 - r639300;
double r639302 = t;
double r639303 = a;
double r639304 = r639303 * r639299;
double r639305 = r639302 - r639304;
double r639306 = r639301 / r639305;
return r639306;
}
double f(double x, double y, double z, double t, double a) {
double r639307 = z;
double r639308 = y;
double r639309 = x;
double r639310 = -r639309;
double r639311 = fma(r639307, r639308, r639310);
double r639312 = a;
double r639313 = t;
double r639314 = -r639313;
double r639315 = fma(r639307, r639312, r639314);
double r639316 = r639311 / r639315;
return r639316;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.2 |
|---|---|
| Target | 1.7 |
| Herbie | 10.2 |
Initial program 10.2
rmApplied frac-2neg10.2
Simplified10.2
Simplified10.2
Final simplification10.2
herbie shell --seed 2020039 +o rules:numerics
(FPCore (x y z t a)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
:precision binary64
:herbie-target
(if (< z -32113435955957344) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.5139522372978296e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))