Average Error: 11.6 → 9.9
Time: 31.3s
Precision: 64
\[\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}\]
\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;
}

Error

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

Target

Original11.6
Target19.2
Herbie9.9
\[\begin{array}{l} \mathbf{if}\;x \lt -1.469694296777705 \cdot 10^{-64}:\\ \;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \frac{b \cdot \left({\left(c \cdot z\right)}^{2} - {\left(t \cdot i\right)}^{2}\right)}{c \cdot z + t \cdot i}\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\ \mathbf{elif}\;x \lt 3.2113527362226803 \cdot 10^{-147}:\\ \;\;\;\;\left(b \cdot i - x \cdot a\right) \cdot t - \left(z \cdot \left(c \cdot b\right) - j \cdot \left(c \cdot a - y \cdot i\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - \frac{b \cdot \left({\left(c \cdot z\right)}^{2} - {\left(t \cdot i\right)}^{2}\right)}{c \cdot z + t \cdot i}\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -6.951832147058687e+70 or 2.3199780976073262e+141 < z

    1. Initial program 20.4

      \[\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)\]
    2. Simplified20.4

      \[\leadsto \color{blue}{\mathsf{fma}\left(a \cdot c - i \cdot y, j, \mathsf{fma}\left(i \cdot t - z \cdot c, b, \left(z \cdot y - t \cdot a\right) \cdot x\right)\right)}\]
    3. Using strategy rm
    4. Applied fma-udef20.4

      \[\leadsto \color{blue}{\left(a \cdot c - i \cdot y\right) \cdot j + \mathsf{fma}\left(i \cdot t - z \cdot c, b, \left(z \cdot y - t \cdot a\right) \cdot x\right)}\]
    5. Using strategy rm
    6. Applied add-cube-cbrt20.5

      \[\leadsto \left(a \cdot c - i \cdot y\right) \cdot \color{blue}{\left(\left(\sqrt[3]{j} \cdot \sqrt[3]{j}\right) \cdot \sqrt[3]{j}\right)} + \mathsf{fma}\left(i \cdot t - z \cdot c, b, \left(z \cdot y - t \cdot a\right) \cdot x\right)\]
    7. Applied associate-*r*20.5

      \[\leadsto \color{blue}{\left(\left(a \cdot c - i \cdot y\right) \cdot \left(\sqrt[3]{j} \cdot \sqrt[3]{j}\right)\right) \cdot \sqrt[3]{j}} + \mathsf{fma}\left(i \cdot t - z \cdot c, b, \left(z \cdot y - t \cdot a\right) \cdot x\right)\]
    8. Taylor expanded around inf 18.4

      \[\leadsto \left(\left(a \cdot c - i \cdot y\right) \cdot \left(\sqrt[3]{j} \cdot \sqrt[3]{j}\right)\right) \cdot \sqrt[3]{j} + \color{blue}{\left(x \cdot \left(z \cdot y\right) - \left(z \cdot \left(b \cdot c\right) + a \cdot \left(x \cdot t\right)\right)\right)}\]
    9. Simplified11.3

      \[\leadsto \left(\left(a \cdot c - i \cdot y\right) \cdot \left(\sqrt[3]{j} \cdot \sqrt[3]{j}\right)\right) \cdot \sqrt[3]{j} + \color{blue}{\left(z \cdot \left(x \cdot y - c \cdot b\right) - a \cdot \left(t \cdot x\right)\right)}\]

    if -6.951832147058687e+70 < z < 2.3199780976073262e+141

    1. Initial program 9.2

      \[\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)\]
    2. Simplified9.2

      \[\leadsto \color{blue}{\mathsf{fma}\left(a \cdot c - i \cdot y, j, \mathsf{fma}\left(i \cdot t - z \cdot c, b, \left(z \cdot y - t \cdot a\right) \cdot x\right)\right)}\]
    3. Using strategy rm
    4. Applied fma-udef9.2

      \[\leadsto \color{blue}{\left(a \cdot c - i \cdot y\right) \cdot j + \mathsf{fma}\left(i \cdot t - z \cdot c, b, \left(z \cdot y - t \cdot a\right) \cdot x\right)}\]
    5. Using strategy rm
    6. Applied add-cube-cbrt9.4

      \[\leadsto \left(a \cdot c - i \cdot y\right) \cdot j + \mathsf{fma}\left(i \cdot t - z \cdot c, b, \left(z \cdot y - t \cdot a\right) \cdot \color{blue}{\left(\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \sqrt[3]{x}\right)}\right)\]
    7. Applied associate-*r*9.4

      \[\leadsto \left(a \cdot c - i \cdot y\right) \cdot j + \mathsf{fma}\left(i \cdot t - z \cdot c, b, \color{blue}{\left(\left(z \cdot y - t \cdot a\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right) \cdot \sqrt[3]{x}}\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification9.9

    \[\leadsto \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}\]

Reproduce

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