Average Error: 5.3 → 4.4
Time: 41.7s
Precision: 64
\[\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.4624631829341433 \cdot 10^{+37}:\\ \;\;\;\;\left(\left(b \cdot c + \left(\left(z \cdot t\right) \cdot \left(\left(x \cdot 18.0\right) \cdot y\right) - \left(a \cdot 4.0\right) \cdot t\right)\right) - \left(4.0 \cdot x\right) \cdot i\right) - k \cdot \left(j \cdot 27.0\right)\\ \mathbf{elif}\;z \le 4.36042650378674 \cdot 10^{+116}:\\ \;\;\;\;\mathsf{fma}\left(\left(x \cdot 18.0\right) \cdot \left(z \cdot y\right) - a \cdot 4.0, t, b \cdot c - \mathsf{fma}\left(j, k \cdot 27.0, x \cdot \left(4.0 \cdot i\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(b \cdot c + \left(\left(z \cdot t\right) \cdot \left(\left(x \cdot 18.0\right) \cdot y\right) - \left(a \cdot 4.0\right) \cdot t\right)\right) - \left(4.0 \cdot x\right) \cdot i\right) - k \cdot \left(j \cdot 27.0\right)\\ \end{array}\]
\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k
\begin{array}{l}
\mathbf{if}\;z \le -1.4624631829341433 \cdot 10^{+37}:\\
\;\;\;\;\left(\left(b \cdot c + \left(\left(z \cdot t\right) \cdot \left(\left(x \cdot 18.0\right) \cdot y\right) - \left(a \cdot 4.0\right) \cdot t\right)\right) - \left(4.0 \cdot x\right) \cdot i\right) - k \cdot \left(j \cdot 27.0\right)\\

\mathbf{elif}\;z \le 4.36042650378674 \cdot 10^{+116}:\\
\;\;\;\;\mathsf{fma}\left(\left(x \cdot 18.0\right) \cdot \left(z \cdot y\right) - a \cdot 4.0, t, b \cdot c - \mathsf{fma}\left(j, k \cdot 27.0, x \cdot \left(4.0 \cdot i\right)\right)\right)\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r4043397 = x;
        double r4043398 = 18.0;
        double r4043399 = r4043397 * r4043398;
        double r4043400 = y;
        double r4043401 = r4043399 * r4043400;
        double r4043402 = z;
        double r4043403 = r4043401 * r4043402;
        double r4043404 = t;
        double r4043405 = r4043403 * r4043404;
        double r4043406 = a;
        double r4043407 = 4.0;
        double r4043408 = r4043406 * r4043407;
        double r4043409 = r4043408 * r4043404;
        double r4043410 = r4043405 - r4043409;
        double r4043411 = b;
        double r4043412 = c;
        double r4043413 = r4043411 * r4043412;
        double r4043414 = r4043410 + r4043413;
        double r4043415 = r4043397 * r4043407;
        double r4043416 = i;
        double r4043417 = r4043415 * r4043416;
        double r4043418 = r4043414 - r4043417;
        double r4043419 = j;
        double r4043420 = 27.0;
        double r4043421 = r4043419 * r4043420;
        double r4043422 = k;
        double r4043423 = r4043421 * r4043422;
        double r4043424 = r4043418 - r4043423;
        return r4043424;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r4043425 = z;
        double r4043426 = -1.4624631829341433e+37;
        bool r4043427 = r4043425 <= r4043426;
        double r4043428 = b;
        double r4043429 = c;
        double r4043430 = r4043428 * r4043429;
        double r4043431 = t;
        double r4043432 = r4043425 * r4043431;
        double r4043433 = x;
        double r4043434 = 18.0;
        double r4043435 = r4043433 * r4043434;
        double r4043436 = y;
        double r4043437 = r4043435 * r4043436;
        double r4043438 = r4043432 * r4043437;
        double r4043439 = a;
        double r4043440 = 4.0;
        double r4043441 = r4043439 * r4043440;
        double r4043442 = r4043441 * r4043431;
        double r4043443 = r4043438 - r4043442;
        double r4043444 = r4043430 + r4043443;
        double r4043445 = r4043440 * r4043433;
        double r4043446 = i;
        double r4043447 = r4043445 * r4043446;
        double r4043448 = r4043444 - r4043447;
        double r4043449 = k;
        double r4043450 = j;
        double r4043451 = 27.0;
        double r4043452 = r4043450 * r4043451;
        double r4043453 = r4043449 * r4043452;
        double r4043454 = r4043448 - r4043453;
        double r4043455 = 4.36042650378674e+116;
        bool r4043456 = r4043425 <= r4043455;
        double r4043457 = r4043425 * r4043436;
        double r4043458 = r4043435 * r4043457;
        double r4043459 = r4043458 - r4043441;
        double r4043460 = r4043449 * r4043451;
        double r4043461 = r4043440 * r4043446;
        double r4043462 = r4043433 * r4043461;
        double r4043463 = fma(r4043450, r4043460, r4043462);
        double r4043464 = r4043430 - r4043463;
        double r4043465 = fma(r4043459, r4043431, r4043464);
        double r4043466 = r4043456 ? r4043465 : r4043454;
        double r4043467 = r4043427 ? r4043454 : r4043466;
        return r4043467;
}

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

Bits error versus k

Derivation

  1. Split input into 2 regimes
  2. if z < -1.4624631829341433e+37 or 4.36042650378674e+116 < z

    1. Initial program 7.9

      \[\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k\]
    2. Using strategy rm
    3. Applied associate-*l*9.9

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

    if -1.4624631829341433e+37 < z < 4.36042650378674e+116

    1. Initial program 4.1

      \[\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k\]
    2. Simplified1.7

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

      \[\leadsto \mathsf{fma}\left(\left(y \cdot z\right) \cdot \left(x \cdot 18.0\right) - a \cdot 4.0, t, \color{blue}{b \cdot c - \left(27.0 \cdot \left(j \cdot k\right) + 4.0 \cdot \left(i \cdot x\right)\right)}\right)\]
    4. Simplified1.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.4624631829341433 \cdot 10^{+37}:\\ \;\;\;\;\left(\left(b \cdot c + \left(\left(z \cdot t\right) \cdot \left(\left(x \cdot 18.0\right) \cdot y\right) - \left(a \cdot 4.0\right) \cdot t\right)\right) - \left(4.0 \cdot x\right) \cdot i\right) - k \cdot \left(j \cdot 27.0\right)\\ \mathbf{elif}\;z \le 4.36042650378674 \cdot 10^{+116}:\\ \;\;\;\;\mathsf{fma}\left(\left(x \cdot 18.0\right) \cdot \left(z \cdot y\right) - a \cdot 4.0, t, b \cdot c - \mathsf{fma}\left(j, k \cdot 27.0, x \cdot \left(4.0 \cdot i\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(b \cdot c + \left(\left(z \cdot t\right) \cdot \left(\left(x \cdot 18.0\right) \cdot y\right) - \left(a \cdot 4.0\right) \cdot t\right)\right) - \left(4.0 \cdot x\right) \cdot i\right) - k \cdot \left(j \cdot 27.0\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019151 +o rules:numerics
(FPCore (x y z t a b c i j k)
  :name "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1"
  (- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))