\frac{x - y \cdot z}{t - a \cdot z}x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}double f(double x, double y, double z, double t, double a) {
double r820444 = x;
double r820445 = y;
double r820446 = z;
double r820447 = r820445 * r820446;
double r820448 = r820444 - r820447;
double r820449 = t;
double r820450 = a;
double r820451 = r820450 * r820446;
double r820452 = r820449 - r820451;
double r820453 = r820448 / r820452;
return r820453;
}
double f(double x, double y, double z, double t, double a) {
double r820454 = x;
double r820455 = 1.0;
double r820456 = t;
double r820457 = a;
double r820458 = z;
double r820459 = r820457 * r820458;
double r820460 = r820456 - r820459;
double r820461 = r820455 / r820460;
double r820462 = r820454 * r820461;
double r820463 = y;
double r820464 = r820456 / r820458;
double r820465 = r820464 - r820457;
double r820466 = r820463 / r820465;
double r820467 = r820462 - r820466;
return r820467;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.6 |
|---|---|
| Target | 1.7 |
| Herbie | 3.1 |
Initial program 10.6
rmApplied div-sub10.6
rmApplied associate-/l*8.2
rmApplied div-sub8.2
Simplified3.1
rmApplied div-inv3.1
Final simplification3.1
herbie shell --seed 2020062
(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))))