\frac{x - y \cdot z}{t - a \cdot z}\left(\left(\sqrt[3]{-y} \cdot \sqrt[3]{-y}\right) \cdot \frac{\sqrt[3]{-y}}{\frac{t}{z} - a} + \frac{x}{\mathsf{fma}\left(-z, a, t\right)}\right) + \frac{z}{t - a \cdot z} \cdot \left(\left(-y\right) + y\right)double f(double x, double y, double z, double t, double a) {
double r473578 = x;
double r473579 = y;
double r473580 = z;
double r473581 = r473579 * r473580;
double r473582 = r473578 - r473581;
double r473583 = t;
double r473584 = a;
double r473585 = r473584 * r473580;
double r473586 = r473583 - r473585;
double r473587 = r473582 / r473586;
return r473587;
}
double f(double x, double y, double z, double t, double a) {
double r473588 = y;
double r473589 = -r473588;
double r473590 = cbrt(r473589);
double r473591 = r473590 * r473590;
double r473592 = t;
double r473593 = z;
double r473594 = r473592 / r473593;
double r473595 = a;
double r473596 = r473594 - r473595;
double r473597 = r473590 / r473596;
double r473598 = r473591 * r473597;
double r473599 = x;
double r473600 = -r473593;
double r473601 = fma(r473600, r473595, r473592);
double r473602 = r473599 / r473601;
double r473603 = r473598 + r473602;
double r473604 = r473595 * r473593;
double r473605 = r473592 - r473604;
double r473606 = r473593 / r473605;
double r473607 = r473589 + r473588;
double r473608 = r473606 * r473607;
double r473609 = r473603 + r473608;
return r473609;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.4 |
|---|---|
| Target | 1.8 |
| Herbie | 3.4 |
Initial program 10.4
rmApplied div-sub10.4
Simplified7.8
rmApplied add-cube-cbrt8.3
Applied prod-diff8.3
Simplified7.8
Simplified7.8
rmApplied fma-udef7.8
Simplified2.8
rmApplied *-un-lft-identity2.8
Applied add-cube-cbrt3.4
Applied times-frac3.4
Simplified3.4
Final simplification3.4
herbie shell --seed 2019326 +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))))