Average Error: 5.1 → 4.1
Time: 42.4s
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 -2.0937067811032768 \cdot 10^{-172}:\\ \;\;\;\;\mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \left(b \cdot c - \left(\left(27.0 \cdot k\right) \cdot j + i \cdot \left(x \cdot 4.0\right)\right)\right)\right)\\ \mathbf{elif}\;t \le 6.778538938214973 \cdot 10^{-60}:\\ \;\;\;\;\mathsf{fma}\left(\left(-a \cdot 4.0\right), t, \left(b \cdot c - \left(i \cdot \left(x \cdot 4.0\right) + \left(j \cdot 27.0\right) \cdot k\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \left(b \cdot c - \left(\left(j \cdot k\right) \cdot 27.0 + i \cdot \left(x \cdot 4.0\right)\right)\right)\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}\;t \le -2.0937067811032768 \cdot 10^{-172}:\\
\;\;\;\;\mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \left(b \cdot c - \left(\left(27.0 \cdot k\right) \cdot j + i \cdot \left(x \cdot 4.0\right)\right)\right)\right)\\

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

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \left(b \cdot c - \left(\left(j \cdot k\right) \cdot 27.0 + i \cdot \left(x \cdot 4.0\right)\right)\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 r4377928 = x;
        double r4377929 = 18.0;
        double r4377930 = r4377928 * r4377929;
        double r4377931 = y;
        double r4377932 = r4377930 * r4377931;
        double r4377933 = z;
        double r4377934 = r4377932 * r4377933;
        double r4377935 = t;
        double r4377936 = r4377934 * r4377935;
        double r4377937 = a;
        double r4377938 = 4.0;
        double r4377939 = r4377937 * r4377938;
        double r4377940 = r4377939 * r4377935;
        double r4377941 = r4377936 - r4377940;
        double r4377942 = b;
        double r4377943 = c;
        double r4377944 = r4377942 * r4377943;
        double r4377945 = r4377941 + r4377944;
        double r4377946 = r4377928 * r4377938;
        double r4377947 = i;
        double r4377948 = r4377946 * r4377947;
        double r4377949 = r4377945 - r4377948;
        double r4377950 = j;
        double r4377951 = 27.0;
        double r4377952 = r4377950 * r4377951;
        double r4377953 = k;
        double r4377954 = r4377952 * r4377953;
        double r4377955 = r4377949 - r4377954;
        return r4377955;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r4377956 = t;
        double r4377957 = -2.0937067811032768e-172;
        bool r4377958 = r4377956 <= r4377957;
        double r4377959 = x;
        double r4377960 = 18.0;
        double r4377961 = r4377959 * r4377960;
        double r4377962 = y;
        double r4377963 = r4377961 * r4377962;
        double r4377964 = z;
        double r4377965 = r4377963 * r4377964;
        double r4377966 = a;
        double r4377967 = 4.0;
        double r4377968 = r4377966 * r4377967;
        double r4377969 = r4377965 - r4377968;
        double r4377970 = b;
        double r4377971 = c;
        double r4377972 = r4377970 * r4377971;
        double r4377973 = 27.0;
        double r4377974 = k;
        double r4377975 = r4377973 * r4377974;
        double r4377976 = j;
        double r4377977 = r4377975 * r4377976;
        double r4377978 = i;
        double r4377979 = r4377959 * r4377967;
        double r4377980 = r4377978 * r4377979;
        double r4377981 = r4377977 + r4377980;
        double r4377982 = r4377972 - r4377981;
        double r4377983 = fma(r4377969, r4377956, r4377982);
        double r4377984 = 6.778538938214973e-60;
        bool r4377985 = r4377956 <= r4377984;
        double r4377986 = -r4377968;
        double r4377987 = r4377976 * r4377973;
        double r4377988 = r4377987 * r4377974;
        double r4377989 = r4377980 + r4377988;
        double r4377990 = r4377972 - r4377989;
        double r4377991 = fma(r4377986, r4377956, r4377990);
        double r4377992 = r4377976 * r4377974;
        double r4377993 = r4377992 * r4377973;
        double r4377994 = r4377993 + r4377980;
        double r4377995 = r4377972 - r4377994;
        double r4377996 = fma(r4377969, r4377956, r4377995);
        double r4377997 = r4377985 ? r4377991 : r4377996;
        double r4377998 = r4377958 ? r4377983 : r4377997;
        return r4377998;
}

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 t < -2.0937067811032768e-172

    1. Initial program 3.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. Simplified3.4

      \[\leadsto \color{blue}{\mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \left(c \cdot b - \mathsf{fma}\left(k, \left(27.0 \cdot j\right), \left(\left(x \cdot 4.0\right) \cdot i\right)\right)\right)\right)}\]
    3. Using strategy rm
    4. Applied fma-udef3.4

      \[\leadsto \mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \left(c \cdot b - \color{blue}{\left(k \cdot \left(27.0 \cdot j\right) + \left(x \cdot 4.0\right) \cdot i\right)}\right)\right)\]
    5. Using strategy rm
    6. Applied associate-*r*3.4

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

    if -2.0937067811032768e-172 < t < 6.778538938214973e-60

    1. Initial program 8.3

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \left(c \cdot b - \mathsf{fma}\left(k, \left(27.0 \cdot j\right), \left(\left(x \cdot 4.0\right) \cdot i\right)\right)\right)\right)}\]
    3. Using strategy rm
    4. Applied fma-udef8.3

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

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

    if 6.778538938214973e-60 < t

    1. Initial program 2.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. Simplified2.4

      \[\leadsto \color{blue}{\mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \left(c \cdot b - \mathsf{fma}\left(k, \left(27.0 \cdot j\right), \left(\left(x \cdot 4.0\right) \cdot i\right)\right)\right)\right)}\]
    3. Using strategy rm
    4. Applied fma-udef2.4

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

      \[\leadsto \mathsf{fma}\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z - a \cdot 4.0\right), t, \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)\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification4.1

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

Reproduce

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