Average Error: 12.4 → 10.8
Time: 27.7s
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}\;z \le -1.472198629438373467176788070401966553082 \cdot 10^{186}:\\ \;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \left(x \cdot y - c \cdot b\right) \cdot z - t \cdot \left(x \cdot a\right)\right)\\ \mathbf{elif}\;z \le 4.88790623320237152630256737661557323239 \cdot 10^{94}:\\ \;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \mathsf{fma}\left(b, i \cdot a - c \cdot z, \left(\left(y \cdot z - t \cdot a\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right) \cdot \sqrt[3]{x}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \left(x \cdot y - c \cdot b\right) \cdot z - t \cdot \left(x \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}\;z \le -1.472198629438373467176788070401966553082 \cdot 10^{186}:\\
\;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \left(x \cdot y - c \cdot b\right) \cdot z - t \cdot \left(x \cdot a\right)\right)\\

\mathbf{elif}\;z \le 4.88790623320237152630256737661557323239 \cdot 10^{94}:\\
\;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \mathsf{fma}\left(b, i \cdot a - c \cdot z, \left(\left(y \cdot z - t \cdot a\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right) \cdot \sqrt[3]{x}\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \left(x \cdot y - c \cdot b\right) \cdot z - t \cdot \left(x \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 r3891480 = x;
        double r3891481 = y;
        double r3891482 = z;
        double r3891483 = r3891481 * r3891482;
        double r3891484 = t;
        double r3891485 = a;
        double r3891486 = r3891484 * r3891485;
        double r3891487 = r3891483 - r3891486;
        double r3891488 = r3891480 * r3891487;
        double r3891489 = b;
        double r3891490 = c;
        double r3891491 = r3891490 * r3891482;
        double r3891492 = i;
        double r3891493 = r3891492 * r3891485;
        double r3891494 = r3891491 - r3891493;
        double r3891495 = r3891489 * r3891494;
        double r3891496 = r3891488 - r3891495;
        double r3891497 = j;
        double r3891498 = r3891490 * r3891484;
        double r3891499 = r3891492 * r3891481;
        double r3891500 = r3891498 - r3891499;
        double r3891501 = r3891497 * r3891500;
        double r3891502 = r3891496 + r3891501;
        return r3891502;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r3891503 = z;
        double r3891504 = -1.4721986294383735e+186;
        bool r3891505 = r3891503 <= r3891504;
        double r3891506 = t;
        double r3891507 = c;
        double r3891508 = r3891506 * r3891507;
        double r3891509 = y;
        double r3891510 = i;
        double r3891511 = r3891509 * r3891510;
        double r3891512 = r3891508 - r3891511;
        double r3891513 = j;
        double r3891514 = x;
        double r3891515 = r3891514 * r3891509;
        double r3891516 = b;
        double r3891517 = r3891507 * r3891516;
        double r3891518 = r3891515 - r3891517;
        double r3891519 = r3891518 * r3891503;
        double r3891520 = a;
        double r3891521 = r3891514 * r3891520;
        double r3891522 = r3891506 * r3891521;
        double r3891523 = r3891519 - r3891522;
        double r3891524 = fma(r3891512, r3891513, r3891523);
        double r3891525 = 4.8879062332023715e+94;
        bool r3891526 = r3891503 <= r3891525;
        double r3891527 = r3891510 * r3891520;
        double r3891528 = r3891507 * r3891503;
        double r3891529 = r3891527 - r3891528;
        double r3891530 = r3891509 * r3891503;
        double r3891531 = r3891506 * r3891520;
        double r3891532 = r3891530 - r3891531;
        double r3891533 = cbrt(r3891514);
        double r3891534 = r3891533 * r3891533;
        double r3891535 = r3891532 * r3891534;
        double r3891536 = r3891535 * r3891533;
        double r3891537 = fma(r3891516, r3891529, r3891536);
        double r3891538 = fma(r3891512, r3891513, r3891537);
        double r3891539 = r3891526 ? r3891538 : r3891524;
        double r3891540 = r3891505 ? r3891524 : r3891539;
        return r3891540;
}

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 z < -1.4721986294383735e+186 or 4.8879062332023715e+94 < z

    1. Initial program 22.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. Simplified22.6

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

      \[\leadsto \mathsf{fma}\left(t \cdot c - i \cdot y, j, \mathsf{fma}\left(b, a \cdot i - z \cdot c, \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)\right)\]
    5. Applied associate-*r*22.9

      \[\leadsto \mathsf{fma}\left(t \cdot c - i \cdot y, j, \mathsf{fma}\left(b, a \cdot i - z \cdot c, \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)\right)\]
    6. Taylor expanded around inf 19.6

      \[\leadsto \mathsf{fma}\left(t \cdot c - i \cdot y, j, \color{blue}{x \cdot \left(z \cdot y\right) - \left(z \cdot \left(b \cdot c\right) + t \cdot \left(x \cdot a\right)\right)}\right)\]
    7. Simplified11.4

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

    if -1.4721986294383735e+186 < z < 4.8879062332023715e+94

    1. Initial program 10.4

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

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

      \[\leadsto \mathsf{fma}\left(t \cdot c - i \cdot y, j, \mathsf{fma}\left(b, a \cdot i - z \cdot c, \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)\right)\]
    5. Applied associate-*r*10.7

      \[\leadsto \mathsf{fma}\left(t \cdot c - i \cdot y, j, \mathsf{fma}\left(b, a \cdot i - z \cdot c, \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)\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification10.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.472198629438373467176788070401966553082 \cdot 10^{186}:\\ \;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \left(x \cdot y - c \cdot b\right) \cdot z - t \cdot \left(x \cdot a\right)\right)\\ \mathbf{elif}\;z \le 4.88790623320237152630256737661557323239 \cdot 10^{94}:\\ \;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \mathsf{fma}\left(b, i \cdot a - c \cdot z, \left(\left(y \cdot z - t \cdot a\right) \cdot \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right) \cdot \sqrt[3]{x}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(t \cdot c - y \cdot i, j, \left(x \cdot y - c \cdot b\right) \cdot z - t \cdot \left(x \cdot a\right)\right)\\ \end{array}\]

Reproduce

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