\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -1.312879063490581500293538201678987022825 \cdot 10^{-112} \lor \neg \left(z \le 1.249127713992165749732225760124090029141 \cdot 10^{-107}\right):\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t - a \cdot z}{z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{x - y \cdot z} \cdot \sqrt[3]{x - y \cdot z}}{\frac{t - a \cdot z}{\sqrt[3]{x - y \cdot z}}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r454622 = x;
double r454623 = y;
double r454624 = z;
double r454625 = r454623 * r454624;
double r454626 = r454622 - r454625;
double r454627 = t;
double r454628 = a;
double r454629 = r454628 * r454624;
double r454630 = r454627 - r454629;
double r454631 = r454626 / r454630;
return r454631;
}
double f(double x, double y, double z, double t, double a) {
double r454632 = z;
double r454633 = -1.3128790634905815e-112;
bool r454634 = r454632 <= r454633;
double r454635 = 1.2491277139921657e-107;
bool r454636 = r454632 <= r454635;
double r454637 = !r454636;
bool r454638 = r454634 || r454637;
double r454639 = x;
double r454640 = t;
double r454641 = a;
double r454642 = r454641 * r454632;
double r454643 = r454640 - r454642;
double r454644 = r454639 / r454643;
double r454645 = y;
double r454646 = r454643 / r454632;
double r454647 = r454645 / r454646;
double r454648 = r454644 - r454647;
double r454649 = r454645 * r454632;
double r454650 = r454639 - r454649;
double r454651 = cbrt(r454650);
double r454652 = r454651 * r454651;
double r454653 = r454643 / r454651;
double r454654 = r454652 / r454653;
double r454655 = r454638 ? r454648 : r454654;
return r454655;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.9 |
|---|---|
| Target | 1.6 |
| Herbie | 7.5 |
if z < -1.3128790634905815e-112 or 1.2491277139921657e-107 < z Initial program 16.0
rmApplied div-sub16.0
rmApplied associate-/l*10.5
if -1.3128790634905815e-112 < z < 1.2491277139921657e-107Initial program 0.1
rmApplied add-cube-cbrt1.2
Applied associate-/l*1.2
Final simplification7.5
herbie shell --seed 2019305 +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.51395223729782958e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))