Average Error: 5.5 → 4.5
Time: 27.2s
Precision: 64
\[\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
\[\begin{array}{l} \mathbf{if}\;t \le -1.16781444686311266 \cdot 10^{-150} \lor \neg \left(t \le 4.1450304107497156 \cdot 10^{-137}\right):\\ \;\;\;\;\mathsf{fma}\left(t, \left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(\left(j \cdot 27\right) \cdot \left(\sqrt[3]{k} \cdot \sqrt[3]{k}\right)\right) \cdot \sqrt[3]{k}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(t, 0 - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(j \cdot 27\right) \cdot k\right)\right)\\ \end{array}\]
\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k
\begin{array}{l}
\mathbf{if}\;t \le -1.16781444686311266 \cdot 10^{-150} \lor \neg \left(t \le 4.1450304107497156 \cdot 10^{-137}\right):\\
\;\;\;\;\mathsf{fma}\left(t, \left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(\left(j \cdot 27\right) \cdot \left(\sqrt[3]{k} \cdot \sqrt[3]{k}\right)\right) \cdot \sqrt[3]{k}\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t, 0 - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(j \cdot 27\right) \cdot k\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 k) {
        double r635 = x;
        double r636 = 18.0;
        double r637 = r635 * r636;
        double r638 = y;
        double r639 = r637 * r638;
        double r640 = z;
        double r641 = r639 * r640;
        double r642 = t;
        double r643 = r641 * r642;
        double r644 = a;
        double r645 = 4.0;
        double r646 = r644 * r645;
        double r647 = r646 * r642;
        double r648 = r643 - r647;
        double r649 = b;
        double r650 = c;
        double r651 = r649 * r650;
        double r652 = r648 + r651;
        double r653 = r635 * r645;
        double r654 = i;
        double r655 = r653 * r654;
        double r656 = r652 - r655;
        double r657 = j;
        double r658 = 27.0;
        double r659 = r657 * r658;
        double r660 = k;
        double r661 = r659 * r660;
        double r662 = r656 - r661;
        return r662;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r663 = t;
        double r664 = -1.1678144468631127e-150;
        bool r665 = r663 <= r664;
        double r666 = 4.1450304107497156e-137;
        bool r667 = r663 <= r666;
        double r668 = !r667;
        bool r669 = r665 || r668;
        double r670 = x;
        double r671 = 18.0;
        double r672 = r670 * r671;
        double r673 = y;
        double r674 = r672 * r673;
        double r675 = z;
        double r676 = r674 * r675;
        double r677 = a;
        double r678 = 4.0;
        double r679 = r677 * r678;
        double r680 = r676 - r679;
        double r681 = b;
        double r682 = c;
        double r683 = r681 * r682;
        double r684 = i;
        double r685 = r678 * r684;
        double r686 = j;
        double r687 = 27.0;
        double r688 = r686 * r687;
        double r689 = k;
        double r690 = cbrt(r689);
        double r691 = r690 * r690;
        double r692 = r688 * r691;
        double r693 = r692 * r690;
        double r694 = fma(r670, r685, r693);
        double r695 = r683 - r694;
        double r696 = fma(r663, r680, r695);
        double r697 = 0.0;
        double r698 = r697 - r679;
        double r699 = r688 * r689;
        double r700 = fma(r670, r685, r699);
        double r701 = r683 - r700;
        double r702 = fma(r663, r698, r701);
        double r703 = r669 ? r696 : r702;
        return r703;
}

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 t < -1.1678144468631127e-150 or 4.1450304107497156e-137 < t

    1. Initial program 3.4

      \[\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
    2. Simplified3.4

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

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

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

    if -1.1678144468631127e-150 < t < 4.1450304107497156e-137

    1. Initial program 9.6

      \[\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
    2. Simplified9.6

      \[\leadsto \color{blue}{\mathsf{fma}\left(t, \left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(j \cdot 27\right) \cdot k\right)\right)}\]
    3. Taylor expanded around 0 6.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -1.16781444686311266 \cdot 10^{-150} \lor \neg \left(t \le 4.1450304107497156 \cdot 10^{-137}\right):\\ \;\;\;\;\mathsf{fma}\left(t, \left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(\left(j \cdot 27\right) \cdot \left(\sqrt[3]{k} \cdot \sqrt[3]{k}\right)\right) \cdot \sqrt[3]{k}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(t, 0 - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(j \cdot 27\right) \cdot k\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020025 +o rules:numerics
(FPCore (x y z t a b c i j k)
  :name "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1"
  :precision binary64
  (- (- (+ (- (* (* (* (* x 18) y) z) t) (* (* a 4) t)) (* b c)) (* (* x 4) i)) (* (* j 27) k)))