\frac{x - y \cdot z}{t - a \cdot z}\frac{x - z \cdot y}{t - a \cdot z}double f(double x, double y, double z, double t, double a) {
double r735208 = x;
double r735209 = y;
double r735210 = z;
double r735211 = r735209 * r735210;
double r735212 = r735208 - r735211;
double r735213 = t;
double r735214 = a;
double r735215 = r735214 * r735210;
double r735216 = r735213 - r735215;
double r735217 = r735212 / r735216;
return r735217;
}
double f(double x, double y, double z, double t, double a) {
double r735218 = x;
double r735219 = z;
double r735220 = y;
double r735221 = r735219 * r735220;
double r735222 = r735218 - r735221;
double r735223 = t;
double r735224 = a;
double r735225 = r735224 * r735219;
double r735226 = r735223 - r735225;
double r735227 = r735222 / r735226;
return r735227;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.8 |
|---|---|
| Target | 1.7 |
| Herbie | 10.8 |
Initial program 10.8
rmApplied add-cube-cbrt11.3
Applied fma-neg11.3
Simplified11.3
rmApplied *-un-lft-identity11.3
Applied associate-/r*11.3
Simplified10.8
Final simplification10.8
herbie shell --seed 2020046 +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))))