Average Error: 3.7 → 0.6
Time: 17.9s
Precision: 64
\[\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b\]
\[\begin{array}{l} \mathbf{if}\;\left(y \cdot 9\right) \cdot z \le -7.480026204831319000778820759872426868962 \cdot 10^{303}:\\ \;\;\;\;\left(x \cdot 2 - \left(\left(t \cdot z\right) \cdot 9\right) \cdot y\right) + b \cdot \left(a \cdot 27\right)\\ \mathbf{elif}\;\left(y \cdot 9\right) \cdot z \le 3.519441011210434308575952430482291505964 \cdot 10^{182}:\\ \;\;\;\;b \cdot \left(a \cdot 27\right) + \left(x \cdot 2 - \left(9 \cdot \left(z \cdot y\right)\right) \cdot t\right)\\ \mathbf{else}:\\ \;\;\;\;a \cdot \left(27 \cdot b\right) + \left(x \cdot 2 - \left(t \cdot z\right) \cdot \left(y \cdot 9\right)\right)\\ \end{array}\]
\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b
\begin{array}{l}
\mathbf{if}\;\left(y \cdot 9\right) \cdot z \le -7.480026204831319000778820759872426868962 \cdot 10^{303}:\\
\;\;\;\;\left(x \cdot 2 - \left(\left(t \cdot z\right) \cdot 9\right) \cdot y\right) + b \cdot \left(a \cdot 27\right)\\

\mathbf{elif}\;\left(y \cdot 9\right) \cdot z \le 3.519441011210434308575952430482291505964 \cdot 10^{182}:\\
\;\;\;\;b \cdot \left(a \cdot 27\right) + \left(x \cdot 2 - \left(9 \cdot \left(z \cdot y\right)\right) \cdot t\right)\\

\mathbf{else}:\\
\;\;\;\;a \cdot \left(27 \cdot b\right) + \left(x \cdot 2 - \left(t \cdot z\right) \cdot \left(y \cdot 9\right)\right)\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r36165491 = x;
        double r36165492 = 2.0;
        double r36165493 = r36165491 * r36165492;
        double r36165494 = y;
        double r36165495 = 9.0;
        double r36165496 = r36165494 * r36165495;
        double r36165497 = z;
        double r36165498 = r36165496 * r36165497;
        double r36165499 = t;
        double r36165500 = r36165498 * r36165499;
        double r36165501 = r36165493 - r36165500;
        double r36165502 = a;
        double r36165503 = 27.0;
        double r36165504 = r36165502 * r36165503;
        double r36165505 = b;
        double r36165506 = r36165504 * r36165505;
        double r36165507 = r36165501 + r36165506;
        return r36165507;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r36165508 = y;
        double r36165509 = 9.0;
        double r36165510 = r36165508 * r36165509;
        double r36165511 = z;
        double r36165512 = r36165510 * r36165511;
        double r36165513 = -7.480026204831319e+303;
        bool r36165514 = r36165512 <= r36165513;
        double r36165515 = x;
        double r36165516 = 2.0;
        double r36165517 = r36165515 * r36165516;
        double r36165518 = t;
        double r36165519 = r36165518 * r36165511;
        double r36165520 = r36165519 * r36165509;
        double r36165521 = r36165520 * r36165508;
        double r36165522 = r36165517 - r36165521;
        double r36165523 = b;
        double r36165524 = a;
        double r36165525 = 27.0;
        double r36165526 = r36165524 * r36165525;
        double r36165527 = r36165523 * r36165526;
        double r36165528 = r36165522 + r36165527;
        double r36165529 = 3.5194410112104343e+182;
        bool r36165530 = r36165512 <= r36165529;
        double r36165531 = r36165511 * r36165508;
        double r36165532 = r36165509 * r36165531;
        double r36165533 = r36165532 * r36165518;
        double r36165534 = r36165517 - r36165533;
        double r36165535 = r36165527 + r36165534;
        double r36165536 = r36165525 * r36165523;
        double r36165537 = r36165524 * r36165536;
        double r36165538 = r36165519 * r36165510;
        double r36165539 = r36165517 - r36165538;
        double r36165540 = r36165537 + r36165539;
        double r36165541 = r36165530 ? r36165535 : r36165540;
        double r36165542 = r36165514 ? r36165528 : r36165541;
        return r36165542;
}

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

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original3.7
Target2.7
Herbie0.6
\[\begin{array}{l} \mathbf{if}\;y \lt 7.590524218811188954625810696587370427881 \cdot 10^{-161}:\\ \;\;\;\;\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + a \cdot \left(27 \cdot b\right)\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2 - 9 \cdot \left(y \cdot \left(t \cdot z\right)\right)\right) + \left(a \cdot 27\right) \cdot b\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if (* (* y 9.0) z) < -7.480026204831319e+303

    1. Initial program 62.4

      \[\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b\]
    2. Using strategy rm
    3. Applied associate-*l*1.9

      \[\leadsto \left(x \cdot 2 - \color{blue}{\left(y \cdot 9\right) \cdot \left(z \cdot t\right)}\right) + \left(a \cdot 27\right) \cdot b\]
    4. Using strategy rm
    5. Applied associate-*l*0.6

      \[\leadsto \left(x \cdot 2 - \color{blue}{y \cdot \left(9 \cdot \left(z \cdot t\right)\right)}\right) + \left(a \cdot 27\right) \cdot b\]

    if -7.480026204831319e+303 < (* (* y 9.0) z) < 3.5194410112104343e+182

    1. Initial program 0.5

      \[\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b\]
    2. Taylor expanded around 0 0.5

      \[\leadsto \left(x \cdot 2 - \color{blue}{\left(9 \cdot \left(z \cdot y\right)\right)} \cdot t\right) + \left(a \cdot 27\right) \cdot b\]

    if 3.5194410112104343e+182 < (* (* y 9.0) z)

    1. Initial program 23.6

      \[\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b\]
    2. Using strategy rm
    3. Applied associate-*l*1.5

      \[\leadsto \left(x \cdot 2 - \color{blue}{\left(y \cdot 9\right) \cdot \left(z \cdot t\right)}\right) + \left(a \cdot 27\right) \cdot b\]
    4. Using strategy rm
    5. Applied associate-*l*1.5

      \[\leadsto \left(x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right) + \color{blue}{a \cdot \left(27 \cdot b\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(y \cdot 9\right) \cdot z \le -7.480026204831319000778820759872426868962 \cdot 10^{303}:\\ \;\;\;\;\left(x \cdot 2 - \left(\left(t \cdot z\right) \cdot 9\right) \cdot y\right) + b \cdot \left(a \cdot 27\right)\\ \mathbf{elif}\;\left(y \cdot 9\right) \cdot z \le 3.519441011210434308575952430482291505964 \cdot 10^{182}:\\ \;\;\;\;b \cdot \left(a \cdot 27\right) + \left(x \cdot 2 - \left(9 \cdot \left(z \cdot y\right)\right) \cdot t\right)\\ \mathbf{else}:\\ \;\;\;\;a \cdot \left(27 \cdot b\right) + \left(x \cdot 2 - \left(t \cdot z\right) \cdot \left(y \cdot 9\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019170 
(FPCore (x y z t a b)
  :name "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1, A"

  :herbie-target
  (if (< y 7.590524218811189e-161) (+ (- (* x 2.0) (* (* (* y 9.0) z) t)) (* a (* 27.0 b))) (+ (- (* x 2.0) (* 9.0 (* y (* t z)))) (* (* a 27.0) b)))

  (+ (- (* x 2.0) (* (* (* y 9.0) z) t)) (* (* a 27.0) b)))