Average Error: 5.2 → 3.1
Time: 1.1m
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}\;t \le -9.40853155460478 \cdot 10^{-81}:\\ \;\;\;\;\left(c \cdot b - \left(i \cdot \left(x \cdot 4.0\right) + \left(j \cdot k\right) \cdot 27.0\right)\right) + t \cdot \left(\left(x \cdot z\right) \cdot \left(y \cdot 18.0\right) - a \cdot 4.0\right)\\ \mathbf{elif}\;t \le 2.6598274789675712 \cdot 10^{-36}:\\ \;\;\;\;\left(\left(c \cdot b + \left(\left(\left(18.0 \cdot x\right) \cdot y\right) \cdot \left(t \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right)\right) - i \cdot \left(x \cdot 4.0\right)\right) - \left(j \cdot 27.0\right) \cdot k\\ \mathbf{else}:\\ \;\;\;\;\left(c \cdot b - \left(i \cdot \left(x \cdot 4.0\right) + \left(j \cdot k\right) \cdot 27.0\right)\right) + t \cdot \left(\left(x \cdot z\right) \cdot \left(y \cdot 18.0\right) - a \cdot 4.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 r13871677 = x;
        double r13871678 = 18.0;
        double r13871679 = r13871677 * r13871678;
        double r13871680 = y;
        double r13871681 = r13871679 * r13871680;
        double r13871682 = z;
        double r13871683 = r13871681 * r13871682;
        double r13871684 = t;
        double r13871685 = r13871683 * r13871684;
        double r13871686 = a;
        double r13871687 = 4.0;
        double r13871688 = r13871686 * r13871687;
        double r13871689 = r13871688 * r13871684;
        double r13871690 = r13871685 - r13871689;
        double r13871691 = b;
        double r13871692 = c;
        double r13871693 = r13871691 * r13871692;
        double r13871694 = r13871690 + r13871693;
        double r13871695 = r13871677 * r13871687;
        double r13871696 = i;
        double r13871697 = r13871695 * r13871696;
        double r13871698 = r13871694 - r13871697;
        double r13871699 = j;
        double r13871700 = 27.0;
        double r13871701 = r13871699 * r13871700;
        double r13871702 = k;
        double r13871703 = r13871701 * r13871702;
        double r13871704 = r13871698 - r13871703;
        return r13871704;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r13871705 = t;
        double r13871706 = -9.40853155460478e-81;
        bool r13871707 = r13871705 <= r13871706;
        double r13871708 = c;
        double r13871709 = b;
        double r13871710 = r13871708 * r13871709;
        double r13871711 = i;
        double r13871712 = x;
        double r13871713 = 4.0;
        double r13871714 = r13871712 * r13871713;
        double r13871715 = r13871711 * r13871714;
        double r13871716 = j;
        double r13871717 = k;
        double r13871718 = r13871716 * r13871717;
        double r13871719 = 27.0;
        double r13871720 = r13871718 * r13871719;
        double r13871721 = r13871715 + r13871720;
        double r13871722 = r13871710 - r13871721;
        double r13871723 = z;
        double r13871724 = r13871712 * r13871723;
        double r13871725 = y;
        double r13871726 = 18.0;
        double r13871727 = r13871725 * r13871726;
        double r13871728 = r13871724 * r13871727;
        double r13871729 = a;
        double r13871730 = r13871729 * r13871713;
        double r13871731 = r13871728 - r13871730;
        double r13871732 = r13871705 * r13871731;
        double r13871733 = r13871722 + r13871732;
        double r13871734 = 2.6598274789675712e-36;
        bool r13871735 = r13871705 <= r13871734;
        double r13871736 = r13871726 * r13871712;
        double r13871737 = r13871736 * r13871725;
        double r13871738 = r13871705 * r13871723;
        double r13871739 = r13871737 * r13871738;
        double r13871740 = r13871730 * r13871705;
        double r13871741 = r13871739 - r13871740;
        double r13871742 = r13871710 + r13871741;
        double r13871743 = r13871742 - r13871715;
        double r13871744 = r13871716 * r13871719;
        double r13871745 = r13871744 * r13871717;
        double r13871746 = r13871743 - r13871745;
        double r13871747 = r13871735 ? r13871746 : r13871733;
        double r13871748 = r13871707 ? r13871733 : r13871747;
        return r13871748;
}

\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}\;t \le -9.40853155460478 \cdot 10^{-81}:\\
\;\;\;\;\left(c \cdot b - \left(i \cdot \left(x \cdot 4.0\right) + \left(j \cdot k\right) \cdot 27.0\right)\right) + t \cdot \left(\left(x \cdot z\right) \cdot \left(y \cdot 18.0\right) - a \cdot 4.0\right)\\

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

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

\end{array}

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 < -9.40853155460478e-81 or 2.6598274789675712e-36 < t

    1. Initial program 2.5

      \[\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. Simplified2.3

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

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

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

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

    if -9.40853155460478e-81 < t < 2.6598274789675712e-36

    1. Initial program 7.8

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

      \[\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\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -9.40853155460478 \cdot 10^{-81}:\\ \;\;\;\;\left(c \cdot b - \left(i \cdot \left(x \cdot 4.0\right) + \left(j \cdot k\right) \cdot 27.0\right)\right) + t \cdot \left(\left(x \cdot z\right) \cdot \left(y \cdot 18.0\right) - a \cdot 4.0\right)\\ \mathbf{elif}\;t \le 2.6598274789675712 \cdot 10^{-36}:\\ \;\;\;\;\left(\left(c \cdot b + \left(\left(\left(18.0 \cdot x\right) \cdot y\right) \cdot \left(t \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right)\right) - i \cdot \left(x \cdot 4.0\right)\right) - \left(j \cdot 27.0\right) \cdot k\\ \mathbf{else}:\\ \;\;\;\;\left(c \cdot b - \left(i \cdot \left(x \cdot 4.0\right) + \left(j \cdot k\right) \cdot 27.0\right)\right) + t \cdot \left(\left(x \cdot z\right) \cdot \left(y \cdot 18.0\right) - a \cdot 4.0\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019101 
(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)))