Average Error: 3.6 → 2.3
Time: 12.1s
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}\;y \cdot 9 \le 4.168917714154861757771572877486206993919 \cdot 10^{-90}:\\ \;\;\;\;\left(x \cdot 2 + \left(-9 \cdot \left(t \cdot \left(z \cdot y\right)\right)\right)\right) + \left(a \cdot 27\right) \cdot b\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right) + a \cdot \left(27 \cdot b\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}\;y \cdot 9 \le 4.168917714154861757771572877486206993919 \cdot 10^{-90}:\\
\;\;\;\;\left(x \cdot 2 + \left(-9 \cdot \left(t \cdot \left(z \cdot y\right)\right)\right)\right) + \left(a \cdot 27\right) \cdot b\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r484421 = x;
        double r484422 = 2.0;
        double r484423 = r484421 * r484422;
        double r484424 = y;
        double r484425 = 9.0;
        double r484426 = r484424 * r484425;
        double r484427 = z;
        double r484428 = r484426 * r484427;
        double r484429 = t;
        double r484430 = r484428 * r484429;
        double r484431 = r484423 - r484430;
        double r484432 = a;
        double r484433 = 27.0;
        double r484434 = r484432 * r484433;
        double r484435 = b;
        double r484436 = r484434 * r484435;
        double r484437 = r484431 + r484436;
        return r484437;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r484438 = y;
        double r484439 = 9.0;
        double r484440 = r484438 * r484439;
        double r484441 = 4.168917714154862e-90;
        bool r484442 = r484440 <= r484441;
        double r484443 = x;
        double r484444 = 2.0;
        double r484445 = r484443 * r484444;
        double r484446 = t;
        double r484447 = z;
        double r484448 = r484447 * r484438;
        double r484449 = r484446 * r484448;
        double r484450 = r484439 * r484449;
        double r484451 = -r484450;
        double r484452 = r484445 + r484451;
        double r484453 = a;
        double r484454 = 27.0;
        double r484455 = r484453 * r484454;
        double r484456 = b;
        double r484457 = r484455 * r484456;
        double r484458 = r484452 + r484457;
        double r484459 = r484447 * r484446;
        double r484460 = r484440 * r484459;
        double r484461 = r484445 - r484460;
        double r484462 = r484454 * r484456;
        double r484463 = r484453 * r484462;
        double r484464 = r484461 + r484463;
        double r484465 = r484442 ? r484458 : r484464;
        return r484465;
}

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.6
Target2.6
Herbie2.3
\[\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 2 regimes
  2. if (* y 9.0) < 4.168917714154862e-90

    1. Initial program 2.7

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

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

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

      \[\leadsto \left(x \cdot 2 - \color{blue}{y \cdot \left(\left(z \cdot 9\right) \cdot t\right)}\right) + \left(a \cdot 27\right) \cdot b\]
    7. Using strategy rm
    8. Applied sub-neg4.4

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

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

    if 4.168917714154862e-90 < (* y 9.0)

    1. Initial program 5.9

      \[\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.4

      \[\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.4

      \[\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 2 regimes into one program.
  4. Final simplification2.3

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

Reproduce

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

  :herbie-target
  (if (< y 7.590524218811189e-161) (+ (- (* x 2) (* (* (* y 9) z) t)) (* a (* 27 b))) (+ (- (* x 2) (* 9 (* y (* t z)))) (* (* a 27) b)))

  (+ (- (* x 2) (* (* (* y 9) z) t)) (* (* a 27) b)))