\frac{x - y \cdot z}{t - a \cdot z}\frac{1}{\frac{t - z \cdot a}{x}} - \frac{y}{\frac{t}{z} - a}double f(double x, double y, double z, double t, double a) {
double r428990 = x;
double r428991 = y;
double r428992 = z;
double r428993 = r428991 * r428992;
double r428994 = r428990 - r428993;
double r428995 = t;
double r428996 = a;
double r428997 = r428996 * r428992;
double r428998 = r428995 - r428997;
double r428999 = r428994 / r428998;
return r428999;
}
double f(double x, double y, double z, double t, double a) {
double r429000 = 1.0;
double r429001 = t;
double r429002 = z;
double r429003 = a;
double r429004 = r429002 * r429003;
double r429005 = r429001 - r429004;
double r429006 = x;
double r429007 = r429005 / r429006;
double r429008 = r429000 / r429007;
double r429009 = y;
double r429010 = r429001 / r429002;
double r429011 = r429010 - r429003;
double r429012 = r429009 / r429011;
double r429013 = r429008 - r429012;
return r429013;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.2 |
|---|---|
| Target | 1.8 |
| Herbie | 3.0 |
Initial program 10.2
rmApplied div-sub10.2
rmApplied associate-/l*7.6
rmApplied div-sub7.6
Simplified2.8
rmApplied clear-num3.0
Simplified3.0
Final simplification3.0
herbie shell --seed 2019208
(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.51395223729782958e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))