Average Error: 5.1 → 1.0
Time: 24.9s
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}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i = -\infty:\\ \;\;\;\;\mathsf{fma}\left(b, c, \left(\left(t \cdot x\right) \cdot z\right) \cdot \left(y \cdot 18.0\right) - \mathsf{fma}\left(4.0, \mathsf{fma}\left(t, a, x \cdot i\right), \left(\sqrt{27.0} \cdot \left(k \cdot j\right)\right) \cdot \sqrt{27.0}\right)\right)\\ \mathbf{elif}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i \le 5.9022068027212885 \cdot 10^{+286}:\\ \;\;\;\;\left(\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(27.0 \cdot j\right) \cdot k\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(b, c, \left(\left(t \cdot x\right) \cdot z\right) \cdot \left(y \cdot 18.0\right) - \mathsf{fma}\left(4.0, \mathsf{fma}\left(t, a, x \cdot i\right), \left(\sqrt{27.0} \cdot \left(k \cdot j\right)\right) \cdot \sqrt{27.0}\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}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i = -\infty:\\
\;\;\;\;\mathsf{fma}\left(b, c, \left(\left(t \cdot x\right) \cdot z\right) \cdot \left(y \cdot 18.0\right) - \mathsf{fma}\left(4.0, \mathsf{fma}\left(t, a, x \cdot i\right), \left(\sqrt{27.0} \cdot \left(k \cdot j\right)\right) \cdot \sqrt{27.0}\right)\right)\\

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

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(b, c, \left(\left(t \cdot x\right) \cdot z\right) \cdot \left(y \cdot 18.0\right) - \mathsf{fma}\left(4.0, \mathsf{fma}\left(t, a, x \cdot i\right), \left(\sqrt{27.0} \cdot \left(k \cdot j\right)\right) \cdot \sqrt{27.0}\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 r31696340 = x;
        double r31696341 = 18.0;
        double r31696342 = r31696340 * r31696341;
        double r31696343 = y;
        double r31696344 = r31696342 * r31696343;
        double r31696345 = z;
        double r31696346 = r31696344 * r31696345;
        double r31696347 = t;
        double r31696348 = r31696346 * r31696347;
        double r31696349 = a;
        double r31696350 = 4.0;
        double r31696351 = r31696349 * r31696350;
        double r31696352 = r31696351 * r31696347;
        double r31696353 = r31696348 - r31696352;
        double r31696354 = b;
        double r31696355 = c;
        double r31696356 = r31696354 * r31696355;
        double r31696357 = r31696353 + r31696356;
        double r31696358 = r31696340 * r31696350;
        double r31696359 = i;
        double r31696360 = r31696358 * r31696359;
        double r31696361 = r31696357 - r31696360;
        double r31696362 = j;
        double r31696363 = 27.0;
        double r31696364 = r31696362 * r31696363;
        double r31696365 = k;
        double r31696366 = r31696364 * r31696365;
        double r31696367 = r31696361 - r31696366;
        return r31696367;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r31696368 = t;
        double r31696369 = x;
        double r31696370 = 18.0;
        double r31696371 = r31696369 * r31696370;
        double r31696372 = y;
        double r31696373 = r31696371 * r31696372;
        double r31696374 = z;
        double r31696375 = r31696373 * r31696374;
        double r31696376 = r31696368 * r31696375;
        double r31696377 = a;
        double r31696378 = 4.0;
        double r31696379 = r31696377 * r31696378;
        double r31696380 = r31696379 * r31696368;
        double r31696381 = r31696376 - r31696380;
        double r31696382 = c;
        double r31696383 = b;
        double r31696384 = r31696382 * r31696383;
        double r31696385 = r31696381 + r31696384;
        double r31696386 = r31696369 * r31696378;
        double r31696387 = i;
        double r31696388 = r31696386 * r31696387;
        double r31696389 = r31696385 - r31696388;
        double r31696390 = -inf.0;
        bool r31696391 = r31696389 <= r31696390;
        double r31696392 = r31696368 * r31696369;
        double r31696393 = r31696392 * r31696374;
        double r31696394 = r31696372 * r31696370;
        double r31696395 = r31696393 * r31696394;
        double r31696396 = r31696369 * r31696387;
        double r31696397 = fma(r31696368, r31696377, r31696396);
        double r31696398 = 27.0;
        double r31696399 = sqrt(r31696398);
        double r31696400 = k;
        double r31696401 = j;
        double r31696402 = r31696400 * r31696401;
        double r31696403 = r31696399 * r31696402;
        double r31696404 = r31696403 * r31696399;
        double r31696405 = fma(r31696378, r31696397, r31696404);
        double r31696406 = r31696395 - r31696405;
        double r31696407 = fma(r31696383, r31696382, r31696406);
        double r31696408 = 5.9022068027212885e+286;
        bool r31696409 = r31696389 <= r31696408;
        double r31696410 = r31696398 * r31696401;
        double r31696411 = r31696410 * r31696400;
        double r31696412 = r31696389 - r31696411;
        double r31696413 = r31696409 ? r31696412 : r31696407;
        double r31696414 = r31696391 ? r31696407 : r31696413;
        return r31696414;
}

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.1
Target1.5
Herbie1.0
\[\begin{array}{l} \mathbf{if}\;t \lt -1.6210815397541398 \cdot 10^{-69}:\\ \;\;\;\;\left(\left(18.0 \cdot t\right) \cdot \left(\left(x \cdot y\right) \cdot z\right) - \left(a \cdot t + i \cdot x\right) \cdot 4.0\right) - \left(\left(k \cdot j\right) \cdot 27.0 - c \cdot b\right)\\ \mathbf{elif}\;t \lt 165.68027943805222:\\ \;\;\;\;\left(\left(18.0 \cdot y\right) \cdot \left(x \cdot \left(z \cdot t\right)\right) - \left(a \cdot t + i \cdot x\right) \cdot 4.0\right) + \left(c \cdot b - 27.0 \cdot \left(k \cdot j\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(18.0 \cdot t\right) \cdot \left(\left(x \cdot y\right) \cdot z\right) - \left(a \cdot t + i \cdot x\right) \cdot 4.0\right) - \left(\left(k \cdot j\right) \cdot 27.0 - c \cdot b\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < -inf.0 or 5.9022068027212885e+286 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i))

    1. Initial program 44.6

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

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

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

      \[\leadsto \mathsf{fma}\left(b, c, \left(z \cdot \left(t \cdot x\right)\right) \cdot \left(y \cdot 18.0\right) - \mathsf{fma}\left(4.0, \mathsf{fma}\left(t, a, x \cdot i\right), \color{blue}{\left(\sqrt{27.0} \cdot \sqrt{27.0}\right)} \cdot \left(k \cdot j\right)\right)\right)\]
    7. Applied associate-*l*6.7

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

    if -inf.0 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < 5.9022068027212885e+286

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

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

Reproduce

herbie shell --seed 2019164 +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"

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

  (- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))