Average Error: 3.7 → 1.3
Time: 46.6s
Precision: 64
\[\left(x \cdot 2.0 - \left(\left(y \cdot 9.0\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27.0\right) \cdot b\]
\[\begin{array}{l} \mathbf{if}\;\left(y \cdot 9.0\right) \cdot z = -\infty:\\ \;\;\;\;\left(x \cdot 2.0 - \left(\left(z \cdot 9.0\right) \cdot t\right) \cdot y\right) + \left(27.0 \cdot b\right) \cdot a\\ \mathbf{elif}\;\left(y \cdot 9.0\right) \cdot z \le 5.9361705210496 \cdot 10^{-36}:\\ \;\;\;\;x \cdot 2.0 + \left(27.0 \cdot \left(a \cdot b\right) - \left(t \cdot \left(z \cdot y\right)\right) \cdot 9.0\right)\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2.0 - \left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)\right) + \left(27.0 \cdot b\right) \cdot a\\ \end{array}\]
\left(x \cdot 2.0 - \left(\left(y \cdot 9.0\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27.0\right) \cdot b
\begin{array}{l}
\mathbf{if}\;\left(y \cdot 9.0\right) \cdot z = -\infty:\\
\;\;\;\;\left(x \cdot 2.0 - \left(\left(z \cdot 9.0\right) \cdot t\right) \cdot y\right) + \left(27.0 \cdot b\right) \cdot a\\

\mathbf{elif}\;\left(y \cdot 9.0\right) \cdot z \le 5.9361705210496 \cdot 10^{-36}:\\
\;\;\;\;x \cdot 2.0 + \left(27.0 \cdot \left(a \cdot b\right) - \left(t \cdot \left(z \cdot y\right)\right) \cdot 9.0\right)\\

\mathbf{else}:\\
\;\;\;\;\left(x \cdot 2.0 - \left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)\right) + \left(27.0 \cdot b\right) \cdot a\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r35666644 = x;
        double r35666645 = 2.0;
        double r35666646 = r35666644 * r35666645;
        double r35666647 = y;
        double r35666648 = 9.0;
        double r35666649 = r35666647 * r35666648;
        double r35666650 = z;
        double r35666651 = r35666649 * r35666650;
        double r35666652 = t;
        double r35666653 = r35666651 * r35666652;
        double r35666654 = r35666646 - r35666653;
        double r35666655 = a;
        double r35666656 = 27.0;
        double r35666657 = r35666655 * r35666656;
        double r35666658 = b;
        double r35666659 = r35666657 * r35666658;
        double r35666660 = r35666654 + r35666659;
        return r35666660;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r35666661 = y;
        double r35666662 = 9.0;
        double r35666663 = r35666661 * r35666662;
        double r35666664 = z;
        double r35666665 = r35666663 * r35666664;
        double r35666666 = -inf.0;
        bool r35666667 = r35666665 <= r35666666;
        double r35666668 = x;
        double r35666669 = 2.0;
        double r35666670 = r35666668 * r35666669;
        double r35666671 = r35666664 * r35666662;
        double r35666672 = t;
        double r35666673 = r35666671 * r35666672;
        double r35666674 = r35666673 * r35666661;
        double r35666675 = r35666670 - r35666674;
        double r35666676 = 27.0;
        double r35666677 = b;
        double r35666678 = r35666676 * r35666677;
        double r35666679 = a;
        double r35666680 = r35666678 * r35666679;
        double r35666681 = r35666675 + r35666680;
        double r35666682 = 5.9361705210496e-36;
        bool r35666683 = r35666665 <= r35666682;
        double r35666684 = r35666679 * r35666677;
        double r35666685 = r35666676 * r35666684;
        double r35666686 = r35666664 * r35666661;
        double r35666687 = r35666672 * r35666686;
        double r35666688 = r35666687 * r35666662;
        double r35666689 = r35666685 - r35666688;
        double r35666690 = r35666670 + r35666689;
        double r35666691 = r35666664 * r35666672;
        double r35666692 = r35666663 * r35666691;
        double r35666693 = r35666670 - r35666692;
        double r35666694 = r35666693 + r35666680;
        double r35666695 = r35666683 ? r35666690 : r35666694;
        double r35666696 = r35666667 ? r35666681 : r35666695;
        return r35666696;
}

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.5
Herbie1.3
\[\begin{array}{l} \mathbf{if}\;y \lt 7.590524218811189 \cdot 10^{-161}:\\ \;\;\;\;\left(x \cdot 2.0 - \left(\left(y \cdot 9.0\right) \cdot z\right) \cdot t\right) + a \cdot \left(27.0 \cdot b\right)\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2.0 - 9.0 \cdot \left(y \cdot \left(t \cdot z\right)\right)\right) + \left(a \cdot 27.0\right) \cdot b\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if (* (* y 9.0) z) < -inf.0

    1. Initial program 64.0

      \[\left(x \cdot 2.0 - \left(\left(y \cdot 9.0\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27.0\right) \cdot b\]
    2. Using strategy rm
    3. Applied associate-*l*2.7

      \[\leadsto \left(x \cdot 2.0 - \color{blue}{\left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)}\right) + \left(a \cdot 27.0\right) \cdot b\]
    4. Using strategy rm
    5. Applied associate-*l*3.0

      \[\leadsto \left(x \cdot 2.0 - \left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)\right) + \color{blue}{a \cdot \left(27.0 \cdot b\right)}\]
    6. Using strategy rm
    7. Applied associate-*l*0.9

      \[\leadsto \left(x \cdot 2.0 - \color{blue}{y \cdot \left(9.0 \cdot \left(z \cdot t\right)\right)}\right) + a \cdot \left(27.0 \cdot b\right)\]
    8. Using strategy rm
    9. Applied associate-*r*1.2

      \[\leadsto \left(x \cdot 2.0 - y \cdot \color{blue}{\left(\left(9.0 \cdot z\right) \cdot t\right)}\right) + a \cdot \left(27.0 \cdot b\right)\]

    if -inf.0 < (* (* y 9.0) z) < 5.9361705210496e-36

    1. Initial program 0.4

      \[\left(x \cdot 2.0 - \left(\left(y \cdot 9.0\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27.0\right) \cdot b\]
    2. Using strategy rm
    3. Applied associate-*l*3.6

      \[\leadsto \left(x \cdot 2.0 - \color{blue}{\left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)}\right) + \left(a \cdot 27.0\right) \cdot b\]
    4. Using strategy rm
    5. Applied associate-*l*3.6

      \[\leadsto \left(x \cdot 2.0 - \left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)\right) + \color{blue}{a \cdot \left(27.0 \cdot b\right)}\]
    6. Using strategy rm
    7. Applied associate-*l*3.6

      \[\leadsto \left(x \cdot 2.0 - \color{blue}{y \cdot \left(9.0 \cdot \left(z \cdot t\right)\right)}\right) + a \cdot \left(27.0 \cdot b\right)\]
    8. Using strategy rm
    9. Applied sub-neg3.6

      \[\leadsto \color{blue}{\left(x \cdot 2.0 + \left(-y \cdot \left(9.0 \cdot \left(z \cdot t\right)\right)\right)\right)} + a \cdot \left(27.0 \cdot b\right)\]
    10. Applied associate-+l+3.6

      \[\leadsto \color{blue}{x \cdot 2.0 + \left(\left(-y \cdot \left(9.0 \cdot \left(z \cdot t\right)\right)\right) + a \cdot \left(27.0 \cdot b\right)\right)}\]
    11. Simplified0.3

      \[\leadsto x \cdot 2.0 + \color{blue}{\left(27.0 \cdot \left(a \cdot b\right) - 9.0 \cdot \left(\left(y \cdot z\right) \cdot t\right)\right)}\]

    if 5.9361705210496e-36 < (* (* y 9.0) z)

    1. Initial program 7.1

      \[\left(x \cdot 2.0 - \left(\left(y \cdot 9.0\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27.0\right) \cdot b\]
    2. Using strategy rm
    3. Applied associate-*l*4.4

      \[\leadsto \left(x \cdot 2.0 - \color{blue}{\left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)}\right) + \left(a \cdot 27.0\right) \cdot b\]
    4. Using strategy rm
    5. Applied associate-*l*4.5

      \[\leadsto \left(x \cdot 2.0 - \left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)\right) + \color{blue}{a \cdot \left(27.0 \cdot b\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification1.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(y \cdot 9.0\right) \cdot z = -\infty:\\ \;\;\;\;\left(x \cdot 2.0 - \left(\left(z \cdot 9.0\right) \cdot t\right) \cdot y\right) + \left(27.0 \cdot b\right) \cdot a\\ \mathbf{elif}\;\left(y \cdot 9.0\right) \cdot z \le 5.9361705210496 \cdot 10^{-36}:\\ \;\;\;\;x \cdot 2.0 + \left(27.0 \cdot \left(a \cdot b\right) - \left(t \cdot \left(z \cdot y\right)\right) \cdot 9.0\right)\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2.0 - \left(y \cdot 9.0\right) \cdot \left(z \cdot t\right)\right) + \left(27.0 \cdot b\right) \cdot a\\ \end{array}\]

Reproduce

herbie shell --seed 2019165 
(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)))