\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + j \cdot \left(c \cdot t - i \cdot y\right)
\begin{array}{l}
\mathbf{if}\;b \le -1.218634213792080201745340966505075594605 \cdot 10^{-161}:\\
\;\;\;\;\left(t \cdot \left(j \cdot c\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right) + \left(\left(\left(-\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \left(\sqrt[3]{t} \cdot \left(x \cdot a\right)\right)\right) + x \cdot \left(z \cdot y\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right)\\
\mathbf{elif}\;b \le 4.019988014933805737651483930381726228251 \cdot 10^{-236}:\\
\;\;\;\;\left(x \cdot \left(z \cdot y\right) + \left(-a \cdot \left(x \cdot t\right)\right)\right) + \left(t \cdot \left(j \cdot c\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{elif}\;b \le 4.890488450149844969276568701808490405517 \cdot 10^{-215}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot 0\right) + j \cdot \left(c \cdot t - i \cdot y\right)\\
\mathbf{elif}\;b \le 4.23029005514141909806817664724091704732 \cdot 10^{-90}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + b \cdot \left(-i \cdot a\right)\right)\right) + \left(t \cdot \left(j \cdot c\right) + \left(-i \cdot \left(j \cdot y\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(-t \cdot \left(x \cdot a\right)\right) + x \cdot \left(z \cdot y\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right) + \left(t \cdot \left(j \cdot c\right) + \left(-\left(i \cdot j\right) \cdot y\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r393846 = x;
double r393847 = y;
double r393848 = z;
double r393849 = r393847 * r393848;
double r393850 = t;
double r393851 = a;
double r393852 = r393850 * r393851;
double r393853 = r393849 - r393852;
double r393854 = r393846 * r393853;
double r393855 = b;
double r393856 = c;
double r393857 = r393856 * r393848;
double r393858 = i;
double r393859 = r393858 * r393851;
double r393860 = r393857 - r393859;
double r393861 = r393855 * r393860;
double r393862 = r393854 - r393861;
double r393863 = j;
double r393864 = r393856 * r393850;
double r393865 = r393858 * r393847;
double r393866 = r393864 - r393865;
double r393867 = r393863 * r393866;
double r393868 = r393862 + r393867;
return r393868;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r393869 = b;
double r393870 = -1.2186342137920802e-161;
bool r393871 = r393869 <= r393870;
double r393872 = t;
double r393873 = j;
double r393874 = c;
double r393875 = r393873 * r393874;
double r393876 = r393872 * r393875;
double r393877 = i;
double r393878 = y;
double r393879 = r393873 * r393878;
double r393880 = r393877 * r393879;
double r393881 = -r393880;
double r393882 = r393876 + r393881;
double r393883 = cbrt(r393872);
double r393884 = r393883 * r393883;
double r393885 = x;
double r393886 = a;
double r393887 = r393885 * r393886;
double r393888 = r393883 * r393887;
double r393889 = r393884 * r393888;
double r393890 = -r393889;
double r393891 = z;
double r393892 = r393891 * r393878;
double r393893 = r393885 * r393892;
double r393894 = r393890 + r393893;
double r393895 = r393874 * r393891;
double r393896 = r393877 * r393886;
double r393897 = r393895 - r393896;
double r393898 = r393869 * r393897;
double r393899 = r393894 - r393898;
double r393900 = r393882 + r393899;
double r393901 = 4.019988014933806e-236;
bool r393902 = r393869 <= r393901;
double r393903 = r393885 * r393872;
double r393904 = r393886 * r393903;
double r393905 = -r393904;
double r393906 = r393893 + r393905;
double r393907 = r393906 + r393882;
double r393908 = 4.890488450149845e-215;
bool r393909 = r393869 <= r393908;
double r393910 = r393878 * r393891;
double r393911 = r393872 * r393886;
double r393912 = r393910 - r393911;
double r393913 = r393885 * r393912;
double r393914 = 0.0;
double r393915 = r393869 * r393914;
double r393916 = r393913 - r393915;
double r393917 = r393874 * r393872;
double r393918 = r393877 * r393878;
double r393919 = r393917 - r393918;
double r393920 = r393873 * r393919;
double r393921 = r393916 + r393920;
double r393922 = 4.230290055141419e-90;
bool r393923 = r393869 <= r393922;
double r393924 = r393869 * r393874;
double r393925 = r393891 * r393924;
double r393926 = -r393896;
double r393927 = r393869 * r393926;
double r393928 = r393925 + r393927;
double r393929 = r393913 - r393928;
double r393930 = r393929 + r393882;
double r393931 = r393872 * r393887;
double r393932 = -r393931;
double r393933 = r393932 + r393893;
double r393934 = r393933 - r393898;
double r393935 = r393877 * r393873;
double r393936 = r393935 * r393878;
double r393937 = -r393936;
double r393938 = r393876 + r393937;
double r393939 = r393934 + r393938;
double r393940 = r393923 ? r393930 : r393939;
double r393941 = r393909 ? r393921 : r393940;
double r393942 = r393902 ? r393907 : r393941;
double r393943 = r393871 ? r393900 : r393942;
return r393943;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus i




Bits error versus j
Results
| Original | 12.6 |
|---|---|
| Target | 16.4 |
| Herbie | 12.1 |
if b < -1.2186342137920802e-161Initial program 10.8
rmApplied sub-neg10.8
Applied distribute-lft-in10.8
Simplified10.9
Simplified10.5
rmApplied sub-neg10.5
Applied distribute-lft-in10.5
Simplified10.5
Simplified11.3
rmApplied *-un-lft-identity11.3
Applied associate-*l*11.3
Simplified10.6
rmApplied add-cube-cbrt10.7
Applied associate-*l*10.7
if -1.2186342137920802e-161 < b < 4.019988014933806e-236Initial program 18.3
rmApplied sub-neg18.3
Applied distribute-lft-in18.3
Simplified18.4
Simplified18.1
rmApplied sub-neg18.1
Applied distribute-lft-in18.1
Simplified18.1
Simplified18.5
Taylor expanded around 0 17.4
if 4.019988014933806e-236 < b < 4.890488450149845e-215Initial program 17.7
Taylor expanded around 0 17.9
if 4.890488450149845e-215 < b < 4.230290055141419e-90Initial program 16.9
rmApplied sub-neg16.9
Applied distribute-lft-in16.9
Simplified17.1
Simplified17.0
rmApplied sub-neg17.0
Applied distribute-lft-in17.0
Simplified14.4
if 4.230290055141419e-90 < b Initial program 7.6
rmApplied sub-neg7.6
Applied distribute-lft-in7.6
Simplified7.7
Simplified7.9
rmApplied sub-neg7.9
Applied distribute-lft-in7.9
Simplified7.9
Simplified8.8
rmApplied *-un-lft-identity8.8
Applied associate-*l*8.8
Simplified8.3
rmApplied associate-*r*7.9
Final simplification12.1
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x y z t a b c i j)
:name "Linear.Matrix:det33 from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -8.120978919195912e-33) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t -4.712553818218485e-169) (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (/ (* j (- (pow (* c t) 2) (pow (* i y) 2))) (+ (* c t) (* i y)))) (if (< t -7.633533346031584e-308) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j))) (if (< t 1.0535888557455487e-139) (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (/ (* j (- (pow (* c t) 2) (pow (* i y) 2))) (+ (* c t) (* i y)))) (- (* x (- (* z y) (* a t))) (- (* b (- (* z c) (* a i))) (* (- (* c t) (* y i)) j)))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (* j (- (* c t) (* i y)))))