Average Error: 5.9 → 4.7
Time: 17.7s
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 -4.05720677656797186 \cdot 10^{-131} \lor \neg \left(t \le 1.1132970895009035 \cdot 10^{-169}\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, j \cdot \left(27 \cdot k\right)\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 -4.05720677656797186 \cdot 10^{-131} \lor \neg \left(t \le 1.1132970895009035 \cdot 10^{-169}\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, j \cdot \left(27 \cdot k\right)\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 r135110 = x;
        double r135111 = 18.0;
        double r135112 = r135110 * r135111;
        double r135113 = y;
        double r135114 = r135112 * r135113;
        double r135115 = z;
        double r135116 = r135114 * r135115;
        double r135117 = t;
        double r135118 = r135116 * r135117;
        double r135119 = a;
        double r135120 = 4.0;
        double r135121 = r135119 * r135120;
        double r135122 = r135121 * r135117;
        double r135123 = r135118 - r135122;
        double r135124 = b;
        double r135125 = c;
        double r135126 = r135124 * r135125;
        double r135127 = r135123 + r135126;
        double r135128 = r135110 * r135120;
        double r135129 = i;
        double r135130 = r135128 * r135129;
        double r135131 = r135127 - r135130;
        double r135132 = j;
        double r135133 = 27.0;
        double r135134 = r135132 * r135133;
        double r135135 = k;
        double r135136 = r135134 * r135135;
        double r135137 = r135131 - r135136;
        return r135137;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r135138 = t;
        double r135139 = -4.057206776567972e-131;
        bool r135140 = r135138 <= r135139;
        double r135141 = 1.1132970895009035e-169;
        bool r135142 = r135138 <= r135141;
        double r135143 = !r135142;
        bool r135144 = r135140 || r135143;
        double r135145 = x;
        double r135146 = 18.0;
        double r135147 = r135145 * r135146;
        double r135148 = y;
        double r135149 = r135147 * r135148;
        double r135150 = z;
        double r135151 = r135149 * r135150;
        double r135152 = a;
        double r135153 = 4.0;
        double r135154 = r135152 * r135153;
        double r135155 = r135151 - r135154;
        double r135156 = b;
        double r135157 = c;
        double r135158 = r135156 * r135157;
        double r135159 = i;
        double r135160 = r135153 * r135159;
        double r135161 = j;
        double r135162 = 27.0;
        double r135163 = k;
        double r135164 = r135162 * r135163;
        double r135165 = r135161 * r135164;
        double r135166 = fma(r135145, r135160, r135165);
        double r135167 = r135158 - r135166;
        double r135168 = fma(r135138, r135155, r135167);
        double r135169 = 0.0;
        double r135170 = r135169 - r135154;
        double r135171 = r135161 * r135162;
        double r135172 = r135171 * r135163;
        double r135173 = fma(r135145, r135160, r135172);
        double r135174 = r135158 - r135173;
        double r135175 = fma(r135138, r135170, r135174);
        double r135176 = r135144 ? r135168 : r135175;
        return r135176;
}

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 < -4.057206776567972e-131 or 1.1132970895009035e-169 < t

    1. Initial program 3.7

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

      \[\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 associate-*l*3.7

      \[\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}{j \cdot \left(27 \cdot k\right)}\right)\right)\]

    if -4.057206776567972e-131 < t < 1.1132970895009035e-169

    1. Initial program 10.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. Simplified10.5

      \[\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 associate-*l*10.9

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -4.05720677656797186 \cdot 10^{-131} \lor \neg \left(t \le 1.1132970895009035 \cdot 10^{-169}\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, j \cdot \left(27 \cdot k\right)\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 2020018 +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)))