\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 r426810 = x;
double r426811 = y;
double r426812 = z;
double r426813 = r426811 * r426812;
double r426814 = t;
double r426815 = a;
double r426816 = r426814 * r426815;
double r426817 = r426813 - r426816;
double r426818 = r426810 * r426817;
double r426819 = b;
double r426820 = c;
double r426821 = r426820 * r426812;
double r426822 = i;
double r426823 = r426822 * r426815;
double r426824 = r426821 - r426823;
double r426825 = r426819 * r426824;
double r426826 = r426818 - r426825;
double r426827 = j;
double r426828 = r426820 * r426814;
double r426829 = r426822 * r426811;
double r426830 = r426828 - r426829;
double r426831 = r426827 * r426830;
double r426832 = r426826 + r426831;
return r426832;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r426833 = b;
double r426834 = -5.4076849279368656e-39;
bool r426835 = r426833 <= r426834;
double r426836 = j;
double r426837 = t;
double r426838 = c;
double r426839 = r426837 * r426838;
double r426840 = y;
double r426841 = i;
double r426842 = r426840 * r426841;
double r426843 = r426839 - r426842;
double r426844 = r426836 * r426843;
double r426845 = x;
double r426846 = z;
double r426847 = r426845 * r426846;
double r426848 = r426840 * r426847;
double r426849 = a;
double r426850 = r426845 * r426849;
double r426851 = r426837 * r426850;
double r426852 = r426848 - r426851;
double r426853 = r426844 + r426852;
double r426854 = r426849 * r426841;
double r426855 = r426838 * r426846;
double r426856 = r426854 - r426855;
double r426857 = r426856 * r426833;
double r426858 = r426853 + r426857;
double r426859 = -1.3107080331882569e-167;
bool r426860 = r426833 <= r426859;
double r426861 = -r426842;
double r426862 = r426836 * r426861;
double r426863 = r426836 * r426838;
double r426864 = r426863 * r426837;
double r426865 = r426862 + r426864;
double r426866 = r426837 * r426845;
double r426867 = r426866 * r426849;
double r426868 = r426848 - r426867;
double r426869 = r426865 + r426868;
double r426870 = r426841 * r426833;
double r426871 = r426870 * r426849;
double r426872 = r426833 * r426846;
double r426873 = r426872 * r426838;
double r426874 = r426871 - r426873;
double r426875 = r426869 + r426874;
double r426876 = -5.9391416205088385e-276;
bool r426877 = r426833 <= r426876;
double r426878 = r426840 * r426846;
double r426879 = r426845 * r426878;
double r426880 = r426879 - r426867;
double r426881 = r426880 + r426844;
double r426882 = cbrt(r426871);
double r426883 = r426882 * r426882;
double r426884 = r426882 * r426883;
double r426885 = r426884 - r426873;
double r426886 = r426881 + r426885;
double r426887 = 2.2488515135899008e-207;
bool r426888 = r426833 <= r426887;
double r426889 = 1.659927328976306e+118;
bool r426890 = r426833 <= r426889;
double r426891 = cbrt(r426849);
double r426892 = r426891 * r426891;
double r426893 = r426892 * r426845;
double r426894 = r426837 * r426893;
double r426895 = r426891 * r426894;
double r426896 = r426879 - r426895;
double r426897 = r426844 + r426896;
double r426898 = r426897 + r426874;
double r426899 = -r426841;
double r426900 = r426899 * r426836;
double r426901 = r426840 * r426900;
double r426902 = r426864 + r426901;
double r426903 = r426837 * r426849;
double r426904 = r426878 - r426903;
double r426905 = r426904 * r426845;
double r426906 = r426902 + r426905;
double r426907 = r426857 + r426906;
double r426908 = r426890 ? r426898 : r426907;
double r426909 = r426888 ? r426875 : r426908;
double r426910 = r426877 ? r426886 : r426909;
double r426911 = r426860 ? r426875 : r426910;
double r426912 = r426835 ? r426858 : r426911;
return r426912;
}




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)))))