Average Error: 12.1 → 12.6
Time: 11.1s
Precision: 64
\[\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}\;a \le -6.57397152397334623 \cdot 10^{81} \lor \neg \left(a \le 3.24175772778120092 \cdot 10^{143}\right):\\ \;\;\;\;\mathsf{fma}\left(a, i \cdot b, -\mathsf{fma}\left(z, b \cdot c, a \cdot \left(x \cdot t\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \left(x \cdot \left(\sqrt[3]{y \cdot z - t \cdot a} \cdot \sqrt[3]{y \cdot z - t \cdot a}\right)\right) \cdot \sqrt[3]{y \cdot z - t \cdot a} - b \cdot \left(c \cdot z - i \cdot a\right)\right)\\ \end{array}\]
\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}\;a \le -6.57397152397334623 \cdot 10^{81} \lor \neg \left(a \le 3.24175772778120092 \cdot 10^{143}\right):\\
\;\;\;\;\mathsf{fma}\left(a, i \cdot b, -\mathsf{fma}\left(z, b \cdot c, a \cdot \left(x \cdot t\right)\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \left(x \cdot \left(\sqrt[3]{y \cdot z - t \cdot a} \cdot \sqrt[3]{y \cdot z - t \cdot a}\right)\right) \cdot \sqrt[3]{y \cdot z - t \cdot a} - b \cdot \left(c \cdot z - i \cdot a\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 r103583 = x;
        double r103584 = y;
        double r103585 = z;
        double r103586 = r103584 * r103585;
        double r103587 = t;
        double r103588 = a;
        double r103589 = r103587 * r103588;
        double r103590 = r103586 - r103589;
        double r103591 = r103583 * r103590;
        double r103592 = b;
        double r103593 = c;
        double r103594 = r103593 * r103585;
        double r103595 = i;
        double r103596 = r103595 * r103588;
        double r103597 = r103594 - r103596;
        double r103598 = r103592 * r103597;
        double r103599 = r103591 - r103598;
        double r103600 = j;
        double r103601 = r103593 * r103587;
        double r103602 = r103595 * r103584;
        double r103603 = r103601 - r103602;
        double r103604 = r103600 * r103603;
        double r103605 = r103599 + r103604;
        return r103605;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r103606 = a;
        double r103607 = -6.573971523973346e+81;
        bool r103608 = r103606 <= r103607;
        double r103609 = 3.241757727781201e+143;
        bool r103610 = r103606 <= r103609;
        double r103611 = !r103610;
        bool r103612 = r103608 || r103611;
        double r103613 = i;
        double r103614 = b;
        double r103615 = r103613 * r103614;
        double r103616 = z;
        double r103617 = c;
        double r103618 = r103614 * r103617;
        double r103619 = x;
        double r103620 = t;
        double r103621 = r103619 * r103620;
        double r103622 = r103606 * r103621;
        double r103623 = fma(r103616, r103618, r103622);
        double r103624 = -r103623;
        double r103625 = fma(r103606, r103615, r103624);
        double r103626 = r103617 * r103620;
        double r103627 = y;
        double r103628 = r103613 * r103627;
        double r103629 = r103626 - r103628;
        double r103630 = j;
        double r103631 = r103627 * r103616;
        double r103632 = r103620 * r103606;
        double r103633 = r103631 - r103632;
        double r103634 = cbrt(r103633);
        double r103635 = r103634 * r103634;
        double r103636 = r103619 * r103635;
        double r103637 = r103636 * r103634;
        double r103638 = r103617 * r103616;
        double r103639 = r103613 * r103606;
        double r103640 = r103638 - r103639;
        double r103641 = r103614 * r103640;
        double r103642 = r103637 - r103641;
        double r103643 = fma(r103629, r103630, r103642);
        double r103644 = r103612 ? r103625 : r103643;
        return r103644;
}

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

Derivation

  1. Split input into 2 regimes
  2. if a < -6.573971523973346e+81 or 3.241757727781201e+143 < a

    1. Initial program 20.9

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

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

      \[\leadsto \color{blue}{a \cdot \left(i \cdot b\right) - \left(z \cdot \left(b \cdot c\right) + a \cdot \left(x \cdot t\right)\right)}\]
    4. Simplified22.2

      \[\leadsto \color{blue}{\mathsf{fma}\left(a, i \cdot b, -\mathsf{fma}\left(z, b \cdot c, a \cdot \left(x \cdot t\right)\right)\right)}\]

    if -6.573971523973346e+81 < a < 3.241757727781201e+143

    1. Initial program 9.6

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -6.57397152397334623 \cdot 10^{81} \lor \neg \left(a \le 3.24175772778120092 \cdot 10^{143}\right):\\ \;\;\;\;\mathsf{fma}\left(a, i \cdot b, -\mathsf{fma}\left(z, b \cdot c, a \cdot \left(x \cdot t\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(c \cdot t - i \cdot y, j, \left(x \cdot \left(\sqrt[3]{y \cdot z - t \cdot a} \cdot \sqrt[3]{y \cdot z - t \cdot a}\right)\right) \cdot \sqrt[3]{y \cdot z - t \cdot a} - b \cdot \left(c \cdot z - i \cdot a\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020100 +o rules:numerics
(FPCore (x y z t a b c i j)
  :name "Linear.Matrix:det33 from linear-1.19.1.3"
  :precision binary64
  (+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* i a)))) (* j (- (* c t) (* i y)))))