\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)
\begin{array}{l}
\mathbf{if}\;x \le -1.927625126468503226452016623311537088158 \cdot 10^{-77}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(j \cdot \left(c \cdot a\right) + y \cdot \left(-i \cdot j\right)\right)\\
\mathbf{elif}\;x \le 3.232623075559447812830546234992914843968 \cdot 10^{-247}:\\
\;\;\;\;\left(b \cdot \left(t \cdot i - c \cdot z\right) - a \cdot \left(x \cdot t\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(\left(\sqrt[3]{j \cdot \left(c \cdot a\right)} \cdot \left(\sqrt[3]{j} \cdot \sqrt[3]{c \cdot a}\right)\right) \cdot \sqrt[3]{j \cdot \left(c \cdot a\right)} + \left(-y \cdot i\right) \cdot j\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r562867 = x;
double r562868 = y;
double r562869 = z;
double r562870 = r562868 * r562869;
double r562871 = t;
double r562872 = a;
double r562873 = r562871 * r562872;
double r562874 = r562870 - r562873;
double r562875 = r562867 * r562874;
double r562876 = b;
double r562877 = c;
double r562878 = r562877 * r562869;
double r562879 = i;
double r562880 = r562871 * r562879;
double r562881 = r562878 - r562880;
double r562882 = r562876 * r562881;
double r562883 = r562875 - r562882;
double r562884 = j;
double r562885 = r562877 * r562872;
double r562886 = r562868 * r562879;
double r562887 = r562885 - r562886;
double r562888 = r562884 * r562887;
double r562889 = r562883 + r562888;
return r562889;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r562890 = x;
double r562891 = -1.9276251264685032e-77;
bool r562892 = r562890 <= r562891;
double r562893 = y;
double r562894 = z;
double r562895 = r562893 * r562894;
double r562896 = t;
double r562897 = a;
double r562898 = r562896 * r562897;
double r562899 = r562895 - r562898;
double r562900 = r562890 * r562899;
double r562901 = b;
double r562902 = c;
double r562903 = r562902 * r562894;
double r562904 = i;
double r562905 = r562896 * r562904;
double r562906 = r562903 - r562905;
double r562907 = r562901 * r562906;
double r562908 = r562900 - r562907;
double r562909 = j;
double r562910 = r562902 * r562897;
double r562911 = r562909 * r562910;
double r562912 = r562904 * r562909;
double r562913 = -r562912;
double r562914 = r562893 * r562913;
double r562915 = r562911 + r562914;
double r562916 = r562908 + r562915;
double r562917 = 3.232623075559448e-247;
bool r562918 = r562890 <= r562917;
double r562919 = r562905 - r562903;
double r562920 = r562901 * r562919;
double r562921 = r562890 * r562896;
double r562922 = r562897 * r562921;
double r562923 = r562920 - r562922;
double r562924 = r562893 * r562904;
double r562925 = r562910 - r562924;
double r562926 = r562909 * r562925;
double r562927 = r562923 + r562926;
double r562928 = cbrt(r562911);
double r562929 = cbrt(r562909);
double r562930 = cbrt(r562910);
double r562931 = r562929 * r562930;
double r562932 = r562928 * r562931;
double r562933 = r562932 * r562928;
double r562934 = -r562924;
double r562935 = r562934 * r562909;
double r562936 = r562933 + r562935;
double r562937 = r562908 + r562936;
double r562938 = r562918 ? r562927 : r562937;
double r562939 = r562892 ? r562916 : r562938;
return r562939;
}




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.1 |
|---|---|
| Target | 19.8 |
| Herbie | 11.7 |
if x < -1.9276251264685032e-77Initial program 8.7
rmApplied sub-neg8.7
Applied distribute-lft-in8.7
Simplified8.7
rmApplied distribute-rgt-neg-in8.7
Applied associate-*l*9.6
Simplified9.6
if -1.9276251264685032e-77 < x < 3.232623075559448e-247Initial program 16.6
Taylor expanded around inf 13.9
Simplified14.1
if 3.232623075559448e-247 < x Initial program 11.2
rmApplied sub-neg11.2
Applied distribute-lft-in11.2
Simplified11.2
rmApplied add-cube-cbrt11.3
rmApplied cbrt-prod11.3
Final simplification11.7
herbie shell --seed 2019322
(FPCore (x y z t a b c i j)
:name "Data.Colour.Matrix:determinant from colour-2.3.3, A"
:precision binary64
:herbie-target
(if (< x -1.469694296777705e-64) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2) (pow (* t i) 2))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i)))) (if (< x 3.2113527362226803e-147) (- (* (- (* b i) (* x a)) t) (- (* z (* c b)) (* j (- (* c a) (* y i))))) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2) (pow (* t i) 2))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* t i)))) (* j (- (* c a) (* y i)))))