Average Error: 12.3 → 10.6
Time: 29.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}\;z \le -1.598051949792396904653419965913894074473 \cdot 10^{105}:\\ \;\;\;\;\left(z \cdot \left(x \cdot y - b \cdot c\right) - t \cdot \left(a \cdot x\right)\right) + \left(t \cdot c - y \cdot i\right) \cdot j\\ \mathbf{elif}\;z \le 1.201127816815718654143430033087724950747 \cdot 10^{-5}:\\ \;\;\;\;\mathsf{fma}\left(b, a \cdot i - c \cdot z, \sqrt[3]{x} \cdot \left(\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(y \cdot z - t \cdot a\right)\right)\right) + \left(t \cdot c - y \cdot i\right) \cdot j\\ \mathbf{else}:\\ \;\;\;\;\left(z \cdot \left(x \cdot y - b \cdot c\right) - t \cdot \left(a \cdot x\right)\right) + \left(t \cdot c - y \cdot i\right) \cdot j\\ \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.598051949792396904653419965913894074473 \cdot 10^{105}:\\
\;\;\;\;\left(z \cdot \left(x \cdot y - b \cdot c\right) - t \cdot \left(a \cdot x\right)\right) + \left(t \cdot c - y \cdot i\right) \cdot j\\

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

\mathbf{else}:\\
\;\;\;\;\left(z \cdot \left(x \cdot y - b \cdot c\right) - t \cdot \left(a \cdot x\right)\right) + \left(t \cdot c - y \cdot i\right) \cdot j\\

\end{array}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r4213234 = x;
        double r4213235 = y;
        double r4213236 = z;
        double r4213237 = r4213235 * r4213236;
        double r4213238 = t;
        double r4213239 = a;
        double r4213240 = r4213238 * r4213239;
        double r4213241 = r4213237 - r4213240;
        double r4213242 = r4213234 * r4213241;
        double r4213243 = b;
        double r4213244 = c;
        double r4213245 = r4213244 * r4213236;
        double r4213246 = i;
        double r4213247 = r4213246 * r4213239;
        double r4213248 = r4213245 - r4213247;
        double r4213249 = r4213243 * r4213248;
        double r4213250 = r4213242 - r4213249;
        double r4213251 = j;
        double r4213252 = r4213244 * r4213238;
        double r4213253 = r4213246 * r4213235;
        double r4213254 = r4213252 - r4213253;
        double r4213255 = r4213251 * r4213254;
        double r4213256 = r4213250 + r4213255;
        return r4213256;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r4213257 = z;
        double r4213258 = -1.598051949792397e+105;
        bool r4213259 = r4213257 <= r4213258;
        double r4213260 = x;
        double r4213261 = y;
        double r4213262 = r4213260 * r4213261;
        double r4213263 = b;
        double r4213264 = c;
        double r4213265 = r4213263 * r4213264;
        double r4213266 = r4213262 - r4213265;
        double r4213267 = r4213257 * r4213266;
        double r4213268 = t;
        double r4213269 = a;
        double r4213270 = r4213269 * r4213260;
        double r4213271 = r4213268 * r4213270;
        double r4213272 = r4213267 - r4213271;
        double r4213273 = r4213268 * r4213264;
        double r4213274 = i;
        double r4213275 = r4213261 * r4213274;
        double r4213276 = r4213273 - r4213275;
        double r4213277 = j;
        double r4213278 = r4213276 * r4213277;
        double r4213279 = r4213272 + r4213278;
        double r4213280 = 1.2011278168157187e-05;
        bool r4213281 = r4213257 <= r4213280;
        double r4213282 = r4213269 * r4213274;
        double r4213283 = r4213264 * r4213257;
        double r4213284 = r4213282 - r4213283;
        double r4213285 = cbrt(r4213260);
        double r4213286 = r4213285 * r4213285;
        double r4213287 = r4213261 * r4213257;
        double r4213288 = r4213268 * r4213269;
        double r4213289 = r4213287 - r4213288;
        double r4213290 = r4213286 * r4213289;
        double r4213291 = r4213285 * r4213290;
        double r4213292 = fma(r4213263, r4213284, r4213291);
        double r4213293 = r4213292 + r4213278;
        double r4213294 = r4213281 ? r4213293 : r4213279;
        double r4213295 = r4213259 ? r4213279 : r4213294;
        return r4213295;
}

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.598051949792397e+105 or 1.2011278168157187e-05 < z

    1. Initial program 18.8

      \[\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. Simplified18.8

      \[\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 fma-udef18.8

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

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

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

    if -1.598051949792397e+105 < z < 1.2011278168157187e-05

    1. Initial program 9.5

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

      \[\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 fma-udef9.5

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

      \[\leadsto \left(t \cdot c - i \cdot y\right) \cdot 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)\]
    7. Applied associate-*r*9.8

      \[\leadsto \left(t \cdot c - i \cdot y\right) \cdot 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)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification10.6

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

Reproduce

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