\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 -5.40768492793686555941761981699772927749 \cdot 10^{-39}:\\
\;\;\;\;\left(j \cdot \left(t \cdot c - y \cdot i\right) + \left(y \cdot \left(x \cdot z\right) - t \cdot \left(x \cdot a\right)\right)\right) + \left(a \cdot i - c \cdot z\right) \cdot b\\
\mathbf{elif}\;b \le -1.310708033188256852286497632350011018004 \cdot 10^{-167}:\\
\;\;\;\;\left(\left(j \cdot \left(-y \cdot i\right) + \left(j \cdot c\right) \cdot t\right) + \left(y \cdot \left(x \cdot z\right) - \left(t \cdot x\right) \cdot a\right)\right) + \left(\left(i \cdot b\right) \cdot a - \left(b \cdot z\right) \cdot c\right)\\
\mathbf{elif}\;b \le -5.939141620508838471044724084871683968029 \cdot 10^{-276}:\\
\;\;\;\;\left(\left(x \cdot \left(y \cdot z\right) - \left(t \cdot x\right) \cdot a\right) + j \cdot \left(t \cdot c - y \cdot i\right)\right) + \left(\sqrt[3]{\left(i \cdot b\right) \cdot a} \cdot \left(\sqrt[3]{\left(i \cdot b\right) \cdot a} \cdot \sqrt[3]{\left(i \cdot b\right) \cdot a}\right) - \left(b \cdot z\right) \cdot c\right)\\
\mathbf{elif}\;b \le 2.248851513589900759233480267753595172809 \cdot 10^{-207}:\\
\;\;\;\;\left(\left(j \cdot \left(-y \cdot i\right) + \left(j \cdot c\right) \cdot t\right) + \left(y \cdot \left(x \cdot z\right) - \left(t \cdot x\right) \cdot a\right)\right) + \left(\left(i \cdot b\right) \cdot a - \left(b \cdot z\right) \cdot c\right)\\
\mathbf{elif}\;b \le 1.659927328976305946610149570336434936816 \cdot 10^{118}:\\
\;\;\;\;\left(j \cdot \left(t \cdot c - y \cdot i\right) + \left(x \cdot \left(y \cdot z\right) - \sqrt[3]{a} \cdot \left(t \cdot \left(\left(\sqrt[3]{a} \cdot \sqrt[3]{a}\right) \cdot x\right)\right)\right)\right) + \left(\left(i \cdot b\right) \cdot a - \left(b \cdot z\right) \cdot c\right)\\
\mathbf{else}:\\
\;\;\;\;\left(a \cdot i - c \cdot z\right) \cdot b + \left(\left(\left(j \cdot c\right) \cdot t + y \cdot \left(\left(-i\right) \cdot j\right)\right) + \left(y \cdot z - t \cdot a\right) \cdot x\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r523844 = x;
double r523845 = y;
double r523846 = z;
double r523847 = r523845 * r523846;
double r523848 = t;
double r523849 = a;
double r523850 = r523848 * r523849;
double r523851 = r523847 - r523850;
double r523852 = r523844 * r523851;
double r523853 = b;
double r523854 = c;
double r523855 = r523854 * r523846;
double r523856 = i;
double r523857 = r523856 * r523849;
double r523858 = r523855 - r523857;
double r523859 = r523853 * r523858;
double r523860 = r523852 - r523859;
double r523861 = j;
double r523862 = r523854 * r523848;
double r523863 = r523856 * r523845;
double r523864 = r523862 - r523863;
double r523865 = r523861 * r523864;
double r523866 = r523860 + r523865;
return r523866;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r523867 = b;
double r523868 = -5.4076849279368656e-39;
bool r523869 = r523867 <= r523868;
double r523870 = j;
double r523871 = t;
double r523872 = c;
double r523873 = r523871 * r523872;
double r523874 = y;
double r523875 = i;
double r523876 = r523874 * r523875;
double r523877 = r523873 - r523876;
double r523878 = r523870 * r523877;
double r523879 = x;
double r523880 = z;
double r523881 = r523879 * r523880;
double r523882 = r523874 * r523881;
double r523883 = a;
double r523884 = r523879 * r523883;
double r523885 = r523871 * r523884;
double r523886 = r523882 - r523885;
double r523887 = r523878 + r523886;
double r523888 = r523883 * r523875;
double r523889 = r523872 * r523880;
double r523890 = r523888 - r523889;
double r523891 = r523890 * r523867;
double r523892 = r523887 + r523891;
double r523893 = -1.3107080331882569e-167;
bool r523894 = r523867 <= r523893;
double r523895 = -r523876;
double r523896 = r523870 * r523895;
double r523897 = r523870 * r523872;
double r523898 = r523897 * r523871;
double r523899 = r523896 + r523898;
double r523900 = r523871 * r523879;
double r523901 = r523900 * r523883;
double r523902 = r523882 - r523901;
double r523903 = r523899 + r523902;
double r523904 = r523875 * r523867;
double r523905 = r523904 * r523883;
double r523906 = r523867 * r523880;
double r523907 = r523906 * r523872;
double r523908 = r523905 - r523907;
double r523909 = r523903 + r523908;
double r523910 = -5.9391416205088385e-276;
bool r523911 = r523867 <= r523910;
double r523912 = r523874 * r523880;
double r523913 = r523879 * r523912;
double r523914 = r523913 - r523901;
double r523915 = r523914 + r523878;
double r523916 = cbrt(r523905);
double r523917 = r523916 * r523916;
double r523918 = r523916 * r523917;
double r523919 = r523918 - r523907;
double r523920 = r523915 + r523919;
double r523921 = 2.2488515135899008e-207;
bool r523922 = r523867 <= r523921;
double r523923 = 1.659927328976306e+118;
bool r523924 = r523867 <= r523923;
double r523925 = cbrt(r523883);
double r523926 = r523925 * r523925;
double r523927 = r523926 * r523879;
double r523928 = r523871 * r523927;
double r523929 = r523925 * r523928;
double r523930 = r523913 - r523929;
double r523931 = r523878 + r523930;
double r523932 = r523931 + r523908;
double r523933 = -r523875;
double r523934 = r523933 * r523870;
double r523935 = r523874 * r523934;
double r523936 = r523898 + r523935;
double r523937 = r523871 * r523883;
double r523938 = r523912 - r523937;
double r523939 = r523938 * r523879;
double r523940 = r523936 + r523939;
double r523941 = r523891 + r523940;
double r523942 = r523924 ? r523932 : r523941;
double r523943 = r523922 ? r523909 : r523942;
double r523944 = r523911 ? r523920 : r523943;
double r523945 = r523894 ? r523909 : r523944;
double r523946 = r523869 ? r523892 : r523945;
return r523946;
}




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.3 |
|---|---|
| Target | 16.0 |
| Herbie | 9.8 |
if b < -5.4076849279368656e-39Initial program 8.0
Simplified8.0
Taylor expanded around inf 9.4
Simplified8.2
if -5.4076849279368656e-39 < b < -1.3107080331882569e-167 or -5.9391416205088385e-276 < b < 2.2488515135899008e-207Initial program 15.8
Simplified15.8
Taylor expanded around inf 10.5
Simplified10.4
Taylor expanded around inf 10.2
Simplified10.2
rmApplied sub-neg10.2
Applied distribute-lft-in10.2
Simplified10.9
Simplified10.9
rmApplied associate-*r*10.5
if -1.3107080331882569e-167 < b < -5.9391416205088385e-276Initial program 17.3
Simplified17.3
Taylor expanded around inf 10.9
Simplified11.0
Taylor expanded around inf 10.0
Simplified10.0
rmApplied add-cube-cbrt10.1
Simplified10.1
Simplified10.1
if 2.2488515135899008e-207 < b < 1.659927328976306e+118Initial program 12.9
Simplified12.9
Taylor expanded around inf 11.2
Simplified11.3
Taylor expanded around inf 11.2
Simplified11.2
rmApplied add-cube-cbrt11.4
Applied associate-*r*11.4
Simplified11.3
if 1.659927328976306e+118 < b Initial program 6.0
Simplified6.0
rmApplied sub-neg6.0
Applied distribute-lft-in6.0
Simplified6.5
Simplified6.6
Final simplification9.8
herbie shell --seed 2019194
(FPCore (x y z t a b c i j)
:name "Linear.Matrix:det33 from linear-1.19.1.3"
: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.0) (pow (* i y) 2.0))) (+ (* 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.0) (pow (* i y) 2.0))) (+ (* 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)))))