Average Error: 12.2 → 11.8
Time: 9.6s
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 -4.88036432040742027 \cdot 10^{212} \lor \neg \left(a \le 3.02750195058074553 \cdot 10^{148}\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(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(\sqrt[3]{x} \cdot \left(y \cdot z - t \cdot a\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 -4.88036432040742027 \cdot 10^{212} \lor \neg \left(a \le 3.02750195058074553 \cdot 10^{148}\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(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(\sqrt[3]{x} \cdot \left(y \cdot z - t \cdot a\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 r138142 = x;
        double r138143 = y;
        double r138144 = z;
        double r138145 = r138143 * r138144;
        double r138146 = t;
        double r138147 = a;
        double r138148 = r138146 * r138147;
        double r138149 = r138145 - r138148;
        double r138150 = r138142 * r138149;
        double r138151 = b;
        double r138152 = c;
        double r138153 = r138152 * r138144;
        double r138154 = i;
        double r138155 = r138154 * r138147;
        double r138156 = r138153 - r138155;
        double r138157 = r138151 * r138156;
        double r138158 = r138150 - r138157;
        double r138159 = j;
        double r138160 = r138152 * r138146;
        double r138161 = r138154 * r138143;
        double r138162 = r138160 - r138161;
        double r138163 = r138159 * r138162;
        double r138164 = r138158 + r138163;
        return r138164;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r138165 = a;
        double r138166 = -4.88036432040742e+212;
        bool r138167 = r138165 <= r138166;
        double r138168 = 3.0275019505807455e+148;
        bool r138169 = r138165 <= r138168;
        double r138170 = !r138169;
        bool r138171 = r138167 || r138170;
        double r138172 = i;
        double r138173 = b;
        double r138174 = r138172 * r138173;
        double r138175 = z;
        double r138176 = c;
        double r138177 = r138173 * r138176;
        double r138178 = x;
        double r138179 = t;
        double r138180 = r138178 * r138179;
        double r138181 = r138165 * r138180;
        double r138182 = fma(r138175, r138177, r138181);
        double r138183 = -r138182;
        double r138184 = fma(r138165, r138174, r138183);
        double r138185 = r138176 * r138179;
        double r138186 = y;
        double r138187 = r138172 * r138186;
        double r138188 = r138185 - r138187;
        double r138189 = j;
        double r138190 = cbrt(r138178);
        double r138191 = r138190 * r138190;
        double r138192 = r138186 * r138175;
        double r138193 = r138179 * r138165;
        double r138194 = r138192 - r138193;
        double r138195 = r138190 * r138194;
        double r138196 = r138191 * r138195;
        double r138197 = r138176 * r138175;
        double r138198 = r138172 * r138165;
        double r138199 = r138197 - r138198;
        double r138200 = r138173 * r138199;
        double r138201 = r138196 - r138200;
        double r138202 = fma(r138188, r138189, r138201);
        double r138203 = r138171 ? r138184 : r138202;
        return r138203;
}

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 < -4.88036432040742e+212 or 3.0275019505807455e+148 < a

    1. Initial program 24.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. Simplified24.4

      \[\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 19.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. Simplified19.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 -4.88036432040742e+212 < a < 3.0275019505807455e+148

    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(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-cbrt10.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -4.88036432040742027 \cdot 10^{212} \lor \neg \left(a \le 3.02750195058074553 \cdot 10^{148}\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(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(\sqrt[3]{x} \cdot \left(y \cdot z - t \cdot a\right)\right) - b \cdot \left(c \cdot z - i \cdot a\right)\right)\\ \end{array}\]

Reproduce

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