\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -7.433845130127019277921365656087791646311 \cdot 10^{-258}:\\
\;\;\;\;x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{elif}\;z \le 6.637318488869211541788788475321548606226 \cdot 10^{-120}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \left(\frac{\sqrt[3]{y}}{\frac{\sqrt[3]{t - a \cdot z}}{\sqrt[3]{z}}} \cdot \frac{\sqrt[3]{y}}{\frac{\sqrt[3]{t - a \cdot z}}{\sqrt[3]{z}}}\right) \cdot \frac{\sqrt[3]{y}}{\frac{\sqrt[3]{t - a \cdot z}}{\sqrt[3]{z}}}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r126108848 = x;
double r126108849 = y;
double r126108850 = z;
double r126108851 = r126108849 * r126108850;
double r126108852 = r126108848 - r126108851;
double r126108853 = t;
double r126108854 = a;
double r126108855 = r126108854 * r126108850;
double r126108856 = r126108853 - r126108855;
double r126108857 = r126108852 / r126108856;
return r126108857;
}
double f(double x, double y, double z, double t, double a) {
double r126108858 = z;
double r126108859 = -7.433845130127019e-258;
bool r126108860 = r126108858 <= r126108859;
double r126108861 = x;
double r126108862 = 1.0;
double r126108863 = t;
double r126108864 = a;
double r126108865 = r126108864 * r126108858;
double r126108866 = r126108863 - r126108865;
double r126108867 = r126108862 / r126108866;
double r126108868 = r126108861 * r126108867;
double r126108869 = y;
double r126108870 = r126108863 / r126108858;
double r126108871 = r126108870 - r126108864;
double r126108872 = r126108869 / r126108871;
double r126108873 = r126108868 - r126108872;
double r126108874 = 6.637318488869212e-120;
bool r126108875 = r126108858 <= r126108874;
double r126108876 = r126108861 / r126108866;
double r126108877 = cbrt(r126108869);
double r126108878 = cbrt(r126108866);
double r126108879 = cbrt(r126108858);
double r126108880 = r126108878 / r126108879;
double r126108881 = r126108877 / r126108880;
double r126108882 = r126108881 * r126108881;
double r126108883 = r126108882 * r126108881;
double r126108884 = r126108876 - r126108883;
double r126108885 = r126108875 ? r126108884 : r126108873;
double r126108886 = r126108860 ? r126108873 : r126108885;
return r126108886;
}




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 | 2.4 |
if z < -7.433845130127019e-258 or 6.637318488869212e-120 < z Initial program 12.7
rmApplied div-sub12.7
rmApplied associate-/l*8.8
rmApplied div-sub8.8
Simplified2.9
rmApplied div-inv2.9
if -7.433845130127019e-258 < z < 6.637318488869212e-120Initial program 0.1
rmApplied div-sub0.1
rmApplied associate-/l*3.3
rmApplied add-cube-cbrt3.5
Applied add-cube-cbrt3.5
Applied times-frac3.5
Applied add-cube-cbrt3.5
Applied times-frac1.1
Simplified0.4
Final simplification2.4
herbie shell --seed 2019173 +o rules:numerics
(FPCore (x y z t a)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
:herbie-target
(if (< z -32113435955957344.0) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.5139522372978296e-86) (* (- x (* y z)) (/ 1.0 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))