Average Error: 12.0 → 12.3
Time: 11.9s
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 -2.8861548635551053 \cdot 10^{77}:\\ \;\;\;\;\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 \mathsf{fma}\left(y, z, -a \cdot t\right) + x \cdot \mathsf{fma}\left(-a, t, a \cdot t\right)\right) - 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 -2.8861548635551053 \cdot 10^{77}:\\
\;\;\;\;\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 \mathsf{fma}\left(y, z, -a \cdot t\right) + x \cdot \mathsf{fma}\left(-a, t, a \cdot t\right)\right) - 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 r135529 = x;
        double r135530 = y;
        double r135531 = z;
        double r135532 = r135530 * r135531;
        double r135533 = t;
        double r135534 = a;
        double r135535 = r135533 * r135534;
        double r135536 = r135532 - r135535;
        double r135537 = r135529 * r135536;
        double r135538 = b;
        double r135539 = c;
        double r135540 = r135539 * r135531;
        double r135541 = i;
        double r135542 = r135541 * r135534;
        double r135543 = r135540 - r135542;
        double r135544 = r135538 * r135543;
        double r135545 = r135537 - r135544;
        double r135546 = j;
        double r135547 = r135539 * r135533;
        double r135548 = r135541 * r135530;
        double r135549 = r135547 - r135548;
        double r135550 = r135546 * r135549;
        double r135551 = r135545 + r135550;
        return r135551;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r135552 = a;
        double r135553 = -2.8861548635551053e+77;
        bool r135554 = r135552 <= r135553;
        double r135555 = i;
        double r135556 = b;
        double r135557 = r135555 * r135556;
        double r135558 = z;
        double r135559 = c;
        double r135560 = r135556 * r135559;
        double r135561 = x;
        double r135562 = t;
        double r135563 = r135561 * r135562;
        double r135564 = r135552 * r135563;
        double r135565 = fma(r135558, r135560, r135564);
        double r135566 = -r135565;
        double r135567 = fma(r135552, r135557, r135566);
        double r135568 = r135559 * r135562;
        double r135569 = y;
        double r135570 = r135555 * r135569;
        double r135571 = r135568 - r135570;
        double r135572 = j;
        double r135573 = r135552 * r135562;
        double r135574 = -r135573;
        double r135575 = fma(r135569, r135558, r135574);
        double r135576 = r135561 * r135575;
        double r135577 = -r135552;
        double r135578 = fma(r135577, r135562, r135573);
        double r135579 = r135561 * r135578;
        double r135580 = r135576 + r135579;
        double r135581 = r135559 * r135558;
        double r135582 = r135555 * r135552;
        double r135583 = r135581 - r135582;
        double r135584 = r135556 * r135583;
        double r135585 = r135580 - r135584;
        double r135586 = fma(r135571, r135572, r135585);
        double r135587 = r135554 ? r135567 : r135586;
        return r135587;
}

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 < -2.8861548635551053e+77

    1. Initial program 19.7

      \[\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. Simplified19.7

      \[\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 21.6

      \[\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. Simplified21.6

      \[\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 -2.8861548635551053e+77 < a

    1. Initial program 10.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. Simplified10.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. Using strategy rm
    4. Applied prod-diff10.9

      \[\leadsto \mathsf{fma}\left(c \cdot t - i \cdot y, j, x \cdot \color{blue}{\left(\mathsf{fma}\left(y, z, -a \cdot t\right) + \mathsf{fma}\left(-a, t, a \cdot t\right)\right)} - b \cdot \left(c \cdot z - i \cdot a\right)\right)\]
    5. Applied distribute-lft-in10.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -2.8861548635551053 \cdot 10^{77}:\\ \;\;\;\;\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 \mathsf{fma}\left(y, z, -a \cdot t\right) + x \cdot \mathsf{fma}\left(-a, t, a \cdot t\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020064 +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)))))