Average Error: 3.7 → 0.5
Time: 10.6s
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 = -\infty \lor \neg \left(\left(y \cdot 9\right) \cdot z \le 3.3648771430372573 \cdot 10^{183}\right):\\ \;\;\;\;\left(x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right) + a \cdot \left(27 \cdot b\right)\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + 27 \cdot \left(a \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}\;\left(y \cdot 9\right) \cdot z = -\infty \lor \neg \left(\left(y \cdot 9\right) \cdot z \le 3.3648771430372573 \cdot 10^{183}\right):\\
\;\;\;\;\left(x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right) + a \cdot \left(27 \cdot b\right)\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r880626 = x;
        double r880627 = 2.0;
        double r880628 = r880626 * r880627;
        double r880629 = y;
        double r880630 = 9.0;
        double r880631 = r880629 * r880630;
        double r880632 = z;
        double r880633 = r880631 * r880632;
        double r880634 = t;
        double r880635 = r880633 * r880634;
        double r880636 = r880628 - r880635;
        double r880637 = a;
        double r880638 = 27.0;
        double r880639 = r880637 * r880638;
        double r880640 = b;
        double r880641 = r880639 * r880640;
        double r880642 = r880636 + r880641;
        return r880642;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r880643 = y;
        double r880644 = 9.0;
        double r880645 = r880643 * r880644;
        double r880646 = z;
        double r880647 = r880645 * r880646;
        double r880648 = -inf.0;
        bool r880649 = r880647 <= r880648;
        double r880650 = 3.3648771430372573e+183;
        bool r880651 = r880647 <= r880650;
        double r880652 = !r880651;
        bool r880653 = r880649 || r880652;
        double r880654 = x;
        double r880655 = 2.0;
        double r880656 = r880654 * r880655;
        double r880657 = t;
        double r880658 = r880646 * r880657;
        double r880659 = r880645 * r880658;
        double r880660 = r880656 - r880659;
        double r880661 = a;
        double r880662 = 27.0;
        double r880663 = b;
        double r880664 = r880662 * r880663;
        double r880665 = r880661 * r880664;
        double r880666 = r880660 + r880665;
        double r880667 = r880647 * r880657;
        double r880668 = r880656 - r880667;
        double r880669 = r880661 * r880663;
        double r880670 = r880662 * r880669;
        double r880671 = r880668 + r880670;
        double r880672 = r880653 ? r880666 : r880671;
        return r880672;
}

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.6
Herbie0.5
\[\begin{array}{l} \mathbf{if}\;y \lt 7.590524218811189 \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) z) < -inf.0 or 3.3648771430372573e+183 < (* (* y 9.0) z)

    1. Initial program 34.2

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

      \[\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)}\]

    if -inf.0 < (* (* y 9.0) z) < 3.3648771430372573e+183

    1. Initial program 0.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*4.0

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

      \[\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)}\]
    6. Taylor expanded around 0 4.0

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

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

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

Reproduce

herbie shell --seed 2020043 +o rules:numerics
(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)))