Average Error: 3.6 → 0.9
Time: 15.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}\;\left(\left(y \cdot 9\right) \cdot z\right) \cdot t = -\infty \lor \neg \left(\left(\left(y \cdot 9\right) \cdot z\right) \cdot t \le 1.659231677665064540477277111084746690511 \cdot 10^{250}\right):\\ \;\;\;\;27 \cdot \left(a \cdot b\right) + \left(x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right)\\ \mathbf{else}:\\ \;\;\;\;27 \cdot \left(a \cdot b\right) + \left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\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(\left(y \cdot 9\right) \cdot z\right) \cdot t = -\infty \lor \neg \left(\left(\left(y \cdot 9\right) \cdot z\right) \cdot t \le 1.659231677665064540477277111084746690511 \cdot 10^{250}\right):\\
\;\;\;\;27 \cdot \left(a \cdot b\right) + \left(x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right)\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r584355 = x;
        double r584356 = 2.0;
        double r584357 = r584355 * r584356;
        double r584358 = y;
        double r584359 = 9.0;
        double r584360 = r584358 * r584359;
        double r584361 = z;
        double r584362 = r584360 * r584361;
        double r584363 = t;
        double r584364 = r584362 * r584363;
        double r584365 = r584357 - r584364;
        double r584366 = a;
        double r584367 = 27.0;
        double r584368 = r584366 * r584367;
        double r584369 = b;
        double r584370 = r584368 * r584369;
        double r584371 = r584365 + r584370;
        return r584371;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r584372 = y;
        double r584373 = 9.0;
        double r584374 = r584372 * r584373;
        double r584375 = z;
        double r584376 = r584374 * r584375;
        double r584377 = t;
        double r584378 = r584376 * r584377;
        double r584379 = -inf.0;
        bool r584380 = r584378 <= r584379;
        double r584381 = 1.6592316776650645e+250;
        bool r584382 = r584378 <= r584381;
        double r584383 = !r584382;
        bool r584384 = r584380 || r584383;
        double r584385 = 27.0;
        double r584386 = a;
        double r584387 = b;
        double r584388 = r584386 * r584387;
        double r584389 = r584385 * r584388;
        double r584390 = x;
        double r584391 = 2.0;
        double r584392 = r584390 * r584391;
        double r584393 = r584375 * r584377;
        double r584394 = r584374 * r584393;
        double r584395 = r584392 - r584394;
        double r584396 = r584389 + r584395;
        double r584397 = r584392 - r584378;
        double r584398 = r584389 + r584397;
        double r584399 = r584384 ? r584396 : r584398;
        return r584399;
}

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.8
Herbie0.9
\[\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) z) t) < -inf.0 or 1.6592316776650645e+250 < (* (* (* y 9.0) z) t)

    1. Initial program 40.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. Simplified40.5

      \[\leadsto \color{blue}{\mathsf{fma}\left(a \cdot 27, b, x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right)}\]
    3. Using strategy rm
    4. Applied fma-udef40.5

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

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

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

    if -inf.0 < (* (* (* y 9.0) z) t) < 1.6592316776650645e+250

    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. Simplified0.5

      \[\leadsto \color{blue}{\mathsf{fma}\left(a \cdot 27, b, x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right)}\]
    3. Using strategy rm
    4. Applied fma-udef0.5

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

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

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

Reproduce

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