Average Error: 5.6 → 2.1
Time: 29.0s
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}\;z \le -263371289885747968 \lor \neg \left(z \le 1.255594091630913827396134314174144965199 \cdot 10^{-148}\right):\\ \;\;\;\;\left(\left(\left(\left(\left(t \cdot \left(x \cdot 18\right)\right) \cdot y\right) \cdot z - \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\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\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}\;z \le -263371289885747968 \lor \neg \left(z \le 1.255594091630913827396134314174144965199 \cdot 10^{-148}\right):\\
\;\;\;\;\left(\left(\left(\left(\left(t \cdot \left(x \cdot 18\right)\right) \cdot y\right) \cdot z - \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\\

\mathbf{else}:\\
\;\;\;\;\left(\left(\left(18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\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 r683399 = x;
        double r683400 = 18.0;
        double r683401 = r683399 * r683400;
        double r683402 = y;
        double r683403 = r683401 * r683402;
        double r683404 = z;
        double r683405 = r683403 * r683404;
        double r683406 = t;
        double r683407 = r683405 * r683406;
        double r683408 = a;
        double r683409 = 4.0;
        double r683410 = r683408 * r683409;
        double r683411 = r683410 * r683406;
        double r683412 = r683407 - r683411;
        double r683413 = b;
        double r683414 = c;
        double r683415 = r683413 * r683414;
        double r683416 = r683412 + r683415;
        double r683417 = r683399 * r683409;
        double r683418 = i;
        double r683419 = r683417 * r683418;
        double r683420 = r683416 - r683419;
        double r683421 = j;
        double r683422 = 27.0;
        double r683423 = r683421 * r683422;
        double r683424 = k;
        double r683425 = r683423 * r683424;
        double r683426 = r683420 - r683425;
        return r683426;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r683427 = z;
        double r683428 = -2.6337128988574797e+17;
        bool r683429 = r683427 <= r683428;
        double r683430 = 1.2555940916309138e-148;
        bool r683431 = r683427 <= r683430;
        double r683432 = !r683431;
        bool r683433 = r683429 || r683432;
        double r683434 = t;
        double r683435 = x;
        double r683436 = 18.0;
        double r683437 = r683435 * r683436;
        double r683438 = r683434 * r683437;
        double r683439 = y;
        double r683440 = r683438 * r683439;
        double r683441 = r683440 * r683427;
        double r683442 = a;
        double r683443 = 4.0;
        double r683444 = r683442 * r683443;
        double r683445 = r683444 * r683434;
        double r683446 = r683441 - r683445;
        double r683447 = b;
        double r683448 = c;
        double r683449 = r683447 * r683448;
        double r683450 = r683446 + r683449;
        double r683451 = r683435 * r683443;
        double r683452 = i;
        double r683453 = r683451 * r683452;
        double r683454 = r683450 - r683453;
        double r683455 = j;
        double r683456 = 27.0;
        double r683457 = r683455 * r683456;
        double r683458 = k;
        double r683459 = r683457 * r683458;
        double r683460 = r683454 - r683459;
        double r683461 = r683427 * r683439;
        double r683462 = r683435 * r683461;
        double r683463 = r683434 * r683462;
        double r683464 = r683436 * r683463;
        double r683465 = r683464 - r683445;
        double r683466 = r683465 + r683449;
        double r683467 = r683466 - r683453;
        double r683468 = r683467 - r683459;
        double r683469 = r683433 ? r683460 : r683468;
        return r683469;
}

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

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original5.6
Target1.6
Herbie2.1
\[\begin{array}{l} \mathbf{if}\;t \lt -1.62108153975413982700795070153457058168 \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.6802794380522243500308832153677940369:\\ \;\;\;\;\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 z < -2.6337128988574797e+17 or 1.2555940916309138e-148 < z

    1. Initial program 6.5

      \[\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. Taylor expanded around inf 10.2

      \[\leadsto \left(\left(\left(\color{blue}{18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\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. Simplified2.8

      \[\leadsto \left(\left(\left(\color{blue}{\left(t \cdot \left(\left(x \cdot 18\right) \cdot y\right)\right) \cdot z} - \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-*r*2.8

      \[\leadsto \left(\left(\left(\color{blue}{\left(\left(t \cdot \left(x \cdot 18\right)\right) \cdot y\right)} \cdot z - \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\]

    if -2.6337128988574797e+17 < z < 1.2555940916309138e-148

    1. Initial program 4.5

      \[\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. Taylor expanded around inf 1.1

      \[\leadsto \left(\left(\left(\color{blue}{18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\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. Simplified7.2

      \[\leadsto \left(\left(\left(\color{blue}{\left(t \cdot \left(\left(x \cdot 18\right) \cdot y\right)\right) \cdot z} - \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. Taylor expanded around inf 1.1

      \[\leadsto \left(\left(\left(\color{blue}{18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\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 simplification2.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -263371289885747968 \lor \neg \left(z \le 1.255594091630913827396134314174144965199 \cdot 10^{-148}\right):\\ \;\;\;\;\left(\left(\left(\left(\left(t \cdot \left(x \cdot 18\right)\right) \cdot y\right) \cdot z - \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\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\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 2019305 +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.680279438052224) (+ (- (* (* 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)))