Average Error: 5.3 → 1.8
Time: 12.6s
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 -6.4288223988477578 \cdot 10^{-37} \lor \neg \left(t \le 2.64647452676486563 \cdot 10^{-55}\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}:\\ \;\;\;\;\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot \left(z \cdot t\right)\right) - \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\\ \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 -6.4288223988477578 \cdot 10^{-37} \lor \neg \left(t \le 2.64647452676486563 \cdot 10^{-55}\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}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot \left(z \cdot t\right)\right) - \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\\

\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 r668282 = x;
        double r668283 = 18.0;
        double r668284 = r668282 * r668283;
        double r668285 = y;
        double r668286 = r668284 * r668285;
        double r668287 = z;
        double r668288 = r668286 * r668287;
        double r668289 = t;
        double r668290 = r668288 * r668289;
        double r668291 = a;
        double r668292 = 4.0;
        double r668293 = r668291 * r668292;
        double r668294 = r668293 * r668289;
        double r668295 = r668290 - r668294;
        double r668296 = b;
        double r668297 = c;
        double r668298 = r668296 * r668297;
        double r668299 = r668295 + r668298;
        double r668300 = r668282 * r668292;
        double r668301 = i;
        double r668302 = r668300 * r668301;
        double r668303 = r668299 - r668302;
        double r668304 = j;
        double r668305 = 27.0;
        double r668306 = r668304 * r668305;
        double r668307 = k;
        double r668308 = r668306 * r668307;
        double r668309 = r668303 - r668308;
        return r668309;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r668310 = t;
        double r668311 = -6.428822398847758e-37;
        bool r668312 = r668310 <= r668311;
        double r668313 = 2.6464745267648656e-55;
        bool r668314 = r668310 <= r668313;
        double r668315 = !r668314;
        bool r668316 = r668312 || r668315;
        double r668317 = x;
        double r668318 = 18.0;
        double r668319 = r668317 * r668318;
        double r668320 = y;
        double r668321 = r668319 * r668320;
        double r668322 = z;
        double r668323 = r668321 * r668322;
        double r668324 = a;
        double r668325 = 4.0;
        double r668326 = r668324 * r668325;
        double r668327 = r668323 - r668326;
        double r668328 = b;
        double r668329 = c;
        double r668330 = r668328 * r668329;
        double r668331 = i;
        double r668332 = r668325 * r668331;
        double r668333 = j;
        double r668334 = 27.0;
        double r668335 = k;
        double r668336 = r668334 * r668335;
        double r668337 = r668333 * r668336;
        double r668338 = fma(r668317, r668332, r668337);
        double r668339 = r668330 - r668338;
        double r668340 = fma(r668310, r668327, r668339);
        double r668341 = r668322 * r668310;
        double r668342 = r668320 * r668341;
        double r668343 = r668319 * r668342;
        double r668344 = r668326 * r668310;
        double r668345 = r668343 - r668344;
        double r668346 = r668345 + r668330;
        double r668347 = r668317 * r668325;
        double r668348 = r668347 * r668331;
        double r668349 = r668346 - r668348;
        double r668350 = r668333 * r668334;
        double r668351 = r668350 * r668335;
        double r668352 = r668349 - r668351;
        double r668353 = r668316 ? r668340 : r668352;
        return r668353;
}

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

Target

Original5.3
Target1.5
Herbie1.8
\[\begin{array}{l} \mathbf{if}\;t \lt -1.6210815397541398 \cdot 10^{-69}:\\ \;\;\;\;\left(\left(18 \cdot t\right) \cdot \left(\left(x \cdot y\right) \cdot z\right) - \left(a \cdot t + i \cdot x\right) \cdot 4\right) - \left(\left(k \cdot j\right) \cdot 27 - c \cdot b\right)\\ \mathbf{elif}\;t \lt 165.680279438052224:\\ \;\;\;\;\left(\left(18 \cdot y\right) \cdot \left(x \cdot \left(z \cdot t\right)\right) - \left(a \cdot t + i \cdot x\right) \cdot 4\right) + \left(c \cdot b - 27 \cdot \left(k \cdot j\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(18 \cdot t\right) \cdot \left(\left(x \cdot y\right) \cdot z\right) - \left(a \cdot t + i \cdot x\right) \cdot 4\right) - \left(\left(k \cdot j\right) \cdot 27 - c \cdot b\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if t < -6.428822398847758e-37 or 2.6464745267648656e-55 < t

    1. Initial program 2.1

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

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

      \[\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 -6.428822398847758e-37 < t < 2.6464745267648656e-55

    1. Initial program 8.1

      \[\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. Using strategy rm
    3. Applied associate-*l*4.3

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

      \[\leadsto \left(\left(\left(\color{blue}{\left(x \cdot 18\right) \cdot \left(y \cdot \left(z \cdot t\right)\right)} - \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\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -6.4288223988477578 \cdot 10^{-37} \lor \neg \left(t \le 2.64647452676486563 \cdot 10^{-55}\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}:\\ \;\;\;\;\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot \left(z \cdot t\right)\right) - \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\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< t -1.6210815397541398e-69) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4)) (- (* c b) (* 27 (* k j)))) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b)))))

  (- (- (+ (- (* (* (* (* x 18) y) z) t) (* (* a 4) t)) (* b c)) (* (* x 4) i)) (* (* j 27) k)))