\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}\;z \le -6.951832147058687 \cdot 10^{+70}:\\
\;\;\;\;\sqrt[3]{j} \cdot \left(\left(a \cdot c - y \cdot i\right) \cdot \left(\sqrt[3]{j} \cdot \sqrt[3]{j}\right)\right) + \left(z \cdot \left(x \cdot y - c \cdot b\right) - a \cdot \left(x \cdot t\right)\right)\\
\mathbf{elif}\;z \le 2.3199780976073262 \cdot 10^{+141}:\\
\;\;\;\;\left(a \cdot c - y \cdot i\right) \cdot j + \mathsf{fma}\left(i \cdot t - c \cdot z, b, \sqrt[3]{x} \cdot \left(\left(y \cdot z - t \cdot a\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{j} \cdot \left(\left(a \cdot c - y \cdot i\right) \cdot \left(\sqrt[3]{j} \cdot \sqrt[3]{j}\right)\right) + \left(z \cdot \left(x \cdot y - c \cdot b\right) - a \cdot \left(x \cdot t\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 r29525925 = x;
double r29525926 = y;
double r29525927 = z;
double r29525928 = r29525926 * r29525927;
double r29525929 = t;
double r29525930 = a;
double r29525931 = r29525929 * r29525930;
double r29525932 = r29525928 - r29525931;
double r29525933 = r29525925 * r29525932;
double r29525934 = b;
double r29525935 = c;
double r29525936 = r29525935 * r29525927;
double r29525937 = i;
double r29525938 = r29525929 * r29525937;
double r29525939 = r29525936 - r29525938;
double r29525940 = r29525934 * r29525939;
double r29525941 = r29525933 - r29525940;
double r29525942 = j;
double r29525943 = r29525935 * r29525930;
double r29525944 = r29525926 * r29525937;
double r29525945 = r29525943 - r29525944;
double r29525946 = r29525942 * r29525945;
double r29525947 = r29525941 + r29525946;
return r29525947;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r29525948 = z;
double r29525949 = -6.951832147058687e+70;
bool r29525950 = r29525948 <= r29525949;
double r29525951 = j;
double r29525952 = cbrt(r29525951);
double r29525953 = a;
double r29525954 = c;
double r29525955 = r29525953 * r29525954;
double r29525956 = y;
double r29525957 = i;
double r29525958 = r29525956 * r29525957;
double r29525959 = r29525955 - r29525958;
double r29525960 = r29525952 * r29525952;
double r29525961 = r29525959 * r29525960;
double r29525962 = r29525952 * r29525961;
double r29525963 = x;
double r29525964 = r29525963 * r29525956;
double r29525965 = b;
double r29525966 = r29525954 * r29525965;
double r29525967 = r29525964 - r29525966;
double r29525968 = r29525948 * r29525967;
double r29525969 = t;
double r29525970 = r29525963 * r29525969;
double r29525971 = r29525953 * r29525970;
double r29525972 = r29525968 - r29525971;
double r29525973 = r29525962 + r29525972;
double r29525974 = 2.3199780976073262e+141;
bool r29525975 = r29525948 <= r29525974;
double r29525976 = r29525959 * r29525951;
double r29525977 = r29525957 * r29525969;
double r29525978 = r29525954 * r29525948;
double r29525979 = r29525977 - r29525978;
double r29525980 = cbrt(r29525963);
double r29525981 = r29525956 * r29525948;
double r29525982 = r29525969 * r29525953;
double r29525983 = r29525981 - r29525982;
double r29525984 = r29525980 * r29525980;
double r29525985 = r29525983 * r29525984;
double r29525986 = r29525980 * r29525985;
double r29525987 = fma(r29525979, r29525965, r29525986);
double r29525988 = r29525976 + r29525987;
double r29525989 = r29525975 ? r29525988 : r29525973;
double r29525990 = r29525950 ? r29525973 : r29525989;
return r29525990;
}




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
| Original | 11.6 |
|---|---|
| Target | 19.2 |
| Herbie | 9.9 |
if z < -6.951832147058687e+70 or 2.3199780976073262e+141 < z Initial program 20.4
Simplified20.4
rmApplied fma-udef20.4
rmApplied add-cube-cbrt20.5
Applied associate-*r*20.5
Taylor expanded around inf 18.4
Simplified11.3
if -6.951832147058687e+70 < z < 2.3199780976073262e+141Initial program 9.2
Simplified9.2
rmApplied fma-udef9.2
rmApplied add-cube-cbrt9.4
Applied associate-*r*9.4
Final simplification9.9
herbie shell --seed 2019158 +o rules:numerics
(FPCore (x y z t a b c i j)
:name "Data.Colour.Matrix:determinant from colour-2.3.3, A"
: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)))))