Average Error: 5.3 → 1.8
Time: 1.2m
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}\;x \le -3.131828165595172 \cdot 10^{-94}:\\ \;\;\;\;\left(\left(b \cdot c + \left(\left(\left(\left(z \cdot y\right) \cdot t\right) \cdot 18.0\right) \cdot x - t \cdot \left(a \cdot 4.0\right)\right)\right) - \left(4.0 \cdot x\right) \cdot i\right) - k \cdot \left(j \cdot 27.0\right)\\ \mathbf{elif}\;x \le 5.789205146559688 \cdot 10^{-53}:\\ \;\;\;\;\mathsf{fma}\left(c, b, \left(18.0 \cdot \left(\left(z \cdot x\right) \cdot y\right) - a \cdot 4.0\right) \cdot t - \mathsf{fma}\left(i \cdot x, 4.0, 27.0 \cdot \left(j \cdot k\right)\right)\right) + \left(27.0 \cdot \left(j \cdot k\right) - 27.0 \cdot \left(j \cdot k\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(b \cdot c + \left(\left(y \cdot \left(t \cdot z\right)\right) \cdot \left(18.0 \cdot x\right) - t \cdot \left(a \cdot 4.0\right)\right)\right) - \left(4.0 \cdot x\right) \cdot i\right) - \left(\left(j \cdot 27.0\right) \cdot \left(\sqrt[3]{k} \cdot \sqrt[3]{k}\right)\right) \cdot \sqrt[3]{k}\\ \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}\;x \le -3.131828165595172 \cdot 10^{-94}:\\
\;\;\;\;\left(\left(b \cdot c + \left(\left(\left(\left(z \cdot y\right) \cdot t\right) \cdot 18.0\right) \cdot x - t \cdot \left(a \cdot 4.0\right)\right)\right) - \left(4.0 \cdot x\right) \cdot i\right) - k \cdot \left(j \cdot 27.0\right)\\

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

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

\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 r5587421 = x;
        double r5587422 = 18.0;
        double r5587423 = r5587421 * r5587422;
        double r5587424 = y;
        double r5587425 = r5587423 * r5587424;
        double r5587426 = z;
        double r5587427 = r5587425 * r5587426;
        double r5587428 = t;
        double r5587429 = r5587427 * r5587428;
        double r5587430 = a;
        double r5587431 = 4.0;
        double r5587432 = r5587430 * r5587431;
        double r5587433 = r5587432 * r5587428;
        double r5587434 = r5587429 - r5587433;
        double r5587435 = b;
        double r5587436 = c;
        double r5587437 = r5587435 * r5587436;
        double r5587438 = r5587434 + r5587437;
        double r5587439 = r5587421 * r5587431;
        double r5587440 = i;
        double r5587441 = r5587439 * r5587440;
        double r5587442 = r5587438 - r5587441;
        double r5587443 = j;
        double r5587444 = 27.0;
        double r5587445 = r5587443 * r5587444;
        double r5587446 = k;
        double r5587447 = r5587445 * r5587446;
        double r5587448 = r5587442 - r5587447;
        return r5587448;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r5587449 = x;
        double r5587450 = -3.131828165595172e-94;
        bool r5587451 = r5587449 <= r5587450;
        double r5587452 = b;
        double r5587453 = c;
        double r5587454 = r5587452 * r5587453;
        double r5587455 = z;
        double r5587456 = y;
        double r5587457 = r5587455 * r5587456;
        double r5587458 = t;
        double r5587459 = r5587457 * r5587458;
        double r5587460 = 18.0;
        double r5587461 = r5587459 * r5587460;
        double r5587462 = r5587461 * r5587449;
        double r5587463 = a;
        double r5587464 = 4.0;
        double r5587465 = r5587463 * r5587464;
        double r5587466 = r5587458 * r5587465;
        double r5587467 = r5587462 - r5587466;
        double r5587468 = r5587454 + r5587467;
        double r5587469 = r5587464 * r5587449;
        double r5587470 = i;
        double r5587471 = r5587469 * r5587470;
        double r5587472 = r5587468 - r5587471;
        double r5587473 = k;
        double r5587474 = j;
        double r5587475 = 27.0;
        double r5587476 = r5587474 * r5587475;
        double r5587477 = r5587473 * r5587476;
        double r5587478 = r5587472 - r5587477;
        double r5587479 = 5.789205146559688e-53;
        bool r5587480 = r5587449 <= r5587479;
        double r5587481 = r5587455 * r5587449;
        double r5587482 = r5587481 * r5587456;
        double r5587483 = r5587460 * r5587482;
        double r5587484 = r5587483 - r5587465;
        double r5587485 = r5587484 * r5587458;
        double r5587486 = r5587470 * r5587449;
        double r5587487 = r5587474 * r5587473;
        double r5587488 = r5587475 * r5587487;
        double r5587489 = fma(r5587486, r5587464, r5587488);
        double r5587490 = r5587485 - r5587489;
        double r5587491 = fma(r5587453, r5587452, r5587490);
        double r5587492 = r5587488 - r5587488;
        double r5587493 = r5587491 + r5587492;
        double r5587494 = r5587458 * r5587455;
        double r5587495 = r5587456 * r5587494;
        double r5587496 = r5587460 * r5587449;
        double r5587497 = r5587495 * r5587496;
        double r5587498 = r5587497 - r5587466;
        double r5587499 = r5587454 + r5587498;
        double r5587500 = r5587499 - r5587471;
        double r5587501 = cbrt(r5587473);
        double r5587502 = r5587501 * r5587501;
        double r5587503 = r5587476 * r5587502;
        double r5587504 = r5587503 * r5587501;
        double r5587505 = r5587500 - r5587504;
        double r5587506 = r5587480 ? r5587493 : r5587505;
        double r5587507 = r5587451 ? r5587478 : r5587506;
        return r5587507;
}

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 3 regimes
  2. if x < -3.131828165595172e-94

    1. Initial program 8.4

      \[\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*6.7

      \[\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\]
    4. Using strategy rm
    5. Applied associate-*l*2.3

      \[\leadsto \left(\left(\left(\color{blue}{\left(x \cdot 18.0\right) \cdot \left(y \cdot \left(z \cdot t\right)\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\]
    6. Using strategy rm
    7. Applied associate-*l*2.3

      \[\leadsto \left(\left(\left(\color{blue}{x \cdot \left(18.0 \cdot \left(y \cdot \left(z \cdot t\right)\right)\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\]
    8. Taylor expanded around -inf 2.5

      \[\leadsto \left(\left(\left(x \cdot \left(18.0 \cdot \color{blue}{\left(t \cdot \left(z \cdot y\right)\right)}\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 -3.131828165595172e-94 < x < 5.789205146559688e-53

    1. Initial program 1.2

      \[\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*4.5

      \[\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\]
    4. Using strategy rm
    5. Applied associate-*l*8.7

      \[\leadsto \left(\left(\left(\color{blue}{\left(x \cdot 18.0\right) \cdot \left(y \cdot \left(z \cdot t\right)\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\]
    6. Using strategy rm
    7. Applied *-un-lft-identity8.7

      \[\leadsto \color{blue}{1 \cdot \left(\left(\left(\left(x \cdot 18.0\right) \cdot \left(y \cdot \left(z \cdot t\right)\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\]
    8. Applied prod-diff8.7

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

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

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

    if 5.789205146559688e-53 < x

    1. Initial program 10.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. Using strategy rm
    3. Applied associate-*l*7.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\]
    4. Using strategy rm
    5. Applied associate-*l*2.2

      \[\leadsto \left(\left(\left(\color{blue}{\left(x \cdot 18.0\right) \cdot \left(y \cdot \left(z \cdot t\right)\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\]
    6. Using strategy rm
    7. Applied add-cube-cbrt2.4

      \[\leadsto \left(\left(\left(\left(x \cdot 18.0\right) \cdot \left(y \cdot \left(z \cdot t\right)\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 \color{blue}{\left(\left(\sqrt[3]{k} \cdot \sqrt[3]{k}\right) \cdot \sqrt[3]{k}\right)}\]
    8. Applied associate-*r*2.4

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

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

Reproduce

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