Average Error: 3.6 → 1.2
Time: 4.2s
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 -2.8547222936875714 \cdot 10^{304} \lor \neg \left(\left(y \cdot 9\right) \cdot z \le 7609499462.3579979\right):\\ \;\;\;\;\left(x \cdot 2 - y \cdot \left(\left(9 \cdot z\right) \cdot t\right)\right) + 27 \cdot \left(a \cdot b\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(2 \cdot x - 9 \cdot \left(t \cdot \left(z \cdot y\right)\right)\right) + \left(\left(y \cdot 9\right) \cdot z\right) \cdot \left(\left(-t\right) + t\right)\right) + \sqrt{27} \cdot \left(\sqrt{27} \cdot \left(a \cdot b\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 -2.8547222936875714 \cdot 10^{304} \lor \neg \left(\left(y \cdot 9\right) \cdot z \le 7609499462.3579979\right):\\
\;\;\;\;\left(x \cdot 2 - y \cdot \left(\left(9 \cdot z\right) \cdot t\right)\right) + 27 \cdot \left(a \cdot b\right)\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r876251 = x;
        double r876252 = 2.0;
        double r876253 = r876251 * r876252;
        double r876254 = y;
        double r876255 = 9.0;
        double r876256 = r876254 * r876255;
        double r876257 = z;
        double r876258 = r876256 * r876257;
        double r876259 = t;
        double r876260 = r876258 * r876259;
        double r876261 = r876253 - r876260;
        double r876262 = a;
        double r876263 = 27.0;
        double r876264 = r876262 * r876263;
        double r876265 = b;
        double r876266 = r876264 * r876265;
        double r876267 = r876261 + r876266;
        return r876267;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r876268 = y;
        double r876269 = 9.0;
        double r876270 = r876268 * r876269;
        double r876271 = z;
        double r876272 = r876270 * r876271;
        double r876273 = -2.8547222936875714e+304;
        bool r876274 = r876272 <= r876273;
        double r876275 = 7609499462.357998;
        bool r876276 = r876272 <= r876275;
        double r876277 = !r876276;
        bool r876278 = r876274 || r876277;
        double r876279 = x;
        double r876280 = 2.0;
        double r876281 = r876279 * r876280;
        double r876282 = r876269 * r876271;
        double r876283 = t;
        double r876284 = r876282 * r876283;
        double r876285 = r876268 * r876284;
        double r876286 = r876281 - r876285;
        double r876287 = 27.0;
        double r876288 = a;
        double r876289 = b;
        double r876290 = r876288 * r876289;
        double r876291 = r876287 * r876290;
        double r876292 = r876286 + r876291;
        double r876293 = r876280 * r876279;
        double r876294 = r876271 * r876268;
        double r876295 = r876283 * r876294;
        double r876296 = r876269 * r876295;
        double r876297 = r876293 - r876296;
        double r876298 = -r876283;
        double r876299 = r876298 + r876283;
        double r876300 = r876272 * r876299;
        double r876301 = r876297 + r876300;
        double r876302 = sqrt(r876287);
        double r876303 = r876302 * r876290;
        double r876304 = r876302 * r876303;
        double r876305 = r876301 + r876304;
        double r876306 = r876278 ? r876292 : r876305;
        return r876306;
}

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
Herbie1.2
\[\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) < -2.8547222936875714e+304 or 7609499462.357998 < (* (* y 9.0) z)

    1. Initial program 14.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. Taylor expanded around 0 14.6

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

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

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

    if -2.8547222936875714e+304 < (* (* y 9.0) z) < 7609499462.357998

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

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

      \[\leadsto \color{blue}{\left(\mathsf{fma}\left(x, 2, -t \cdot \left(\left(y \cdot 9\right) \cdot z\right)\right) + \mathsf{fma}\left(-t, \left(y \cdot 9\right) \cdot z, t \cdot \left(\left(y \cdot 9\right) \cdot z\right)\right)\right)} + 27 \cdot \left(a \cdot b\right)\]
    5. Simplified0.4

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

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

      \[\leadsto \left(\left(2 \cdot x - 9 \cdot \left(t \cdot \left(z \cdot y\right)\right)\right) + \left(\left(y \cdot 9\right) \cdot z\right) \cdot \left(\left(-t\right) + t\right)\right) + \color{blue}{\left(\sqrt{27} \cdot \sqrt{27}\right)} \cdot \left(a \cdot b\right)\]
    9. Applied associate-*l*0.5

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

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

Reproduce

herbie shell --seed 2020100 +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)))