Average Error: 3.5 → 0.4
Time: 4.5s
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.8309156342649306 \cdot 10^{217}:\\ \;\;\;\;\mathsf{fma}\left(a, 27 \cdot b, x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right)\\ \mathbf{elif}\;\left(y \cdot 9\right) \cdot z \le 7.881184043757349 \cdot 10^{221}:\\ \;\;\;\;\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2 - y \cdot \left(\left(9 \cdot z\right) \cdot t\right)\right) + \left(a \cdot 27\right) \cdot b\\ \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.8309156342649306 \cdot 10^{217}:\\
\;\;\;\;\mathsf{fma}\left(a, 27 \cdot b, x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right)\\

\mathbf{elif}\;\left(y \cdot 9\right) \cdot z \le 7.881184043757349 \cdot 10^{221}:\\
\;\;\;\;\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r897883 = x;
        double r897884 = 2.0;
        double r897885 = r897883 * r897884;
        double r897886 = y;
        double r897887 = 9.0;
        double r897888 = r897886 * r897887;
        double r897889 = z;
        double r897890 = r897888 * r897889;
        double r897891 = t;
        double r897892 = r897890 * r897891;
        double r897893 = r897885 - r897892;
        double r897894 = a;
        double r897895 = 27.0;
        double r897896 = r897894 * r897895;
        double r897897 = b;
        double r897898 = r897896 * r897897;
        double r897899 = r897893 + r897898;
        return r897899;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r897900 = y;
        double r897901 = 9.0;
        double r897902 = r897900 * r897901;
        double r897903 = z;
        double r897904 = r897902 * r897903;
        double r897905 = -2.8309156342649306e+217;
        bool r897906 = r897904 <= r897905;
        double r897907 = a;
        double r897908 = 27.0;
        double r897909 = b;
        double r897910 = r897908 * r897909;
        double r897911 = x;
        double r897912 = 2.0;
        double r897913 = r897911 * r897912;
        double r897914 = t;
        double r897915 = r897903 * r897914;
        double r897916 = r897902 * r897915;
        double r897917 = r897913 - r897916;
        double r897918 = fma(r897907, r897910, r897917);
        double r897919 = 7.881184043757349e+221;
        bool r897920 = r897904 <= r897919;
        double r897921 = r897904 * r897914;
        double r897922 = r897913 - r897921;
        double r897923 = r897907 * r897908;
        double r897924 = r897923 * r897909;
        double r897925 = r897922 + r897924;
        double r897926 = r897901 * r897903;
        double r897927 = r897926 * r897914;
        double r897928 = r897900 * r897927;
        double r897929 = r897913 - r897928;
        double r897930 = r897929 + r897924;
        double r897931 = r897920 ? r897925 : r897930;
        double r897932 = r897906 ? r897918 : r897931;
        return r897932;
}

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

Target

Original3.5
Target2.5
Herbie0.4
\[\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 3 regimes
  2. if (* (* y 9.0) z) < -2.8309156342649306e+217

    1. Initial program 28.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. Simplified28.5

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

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

    if -2.8309156342649306e+217 < (* (* y 9.0) z) < 7.881184043757349e+221

    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*0.4

      \[\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. Using strategy rm
    5. Applied associate-*r*0.4

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

    if 7.881184043757349e+221 < (* (* y 9.0) z)

    1. Initial program 30.1

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

      \[\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. Using strategy rm
    5. Applied associate-*l*0.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(y \cdot 9\right) \cdot z \le -2.8309156342649306 \cdot 10^{217}:\\ \;\;\;\;\mathsf{fma}\left(a, 27 \cdot b, x \cdot 2 - \left(y \cdot 9\right) \cdot \left(z \cdot t\right)\right)\\ \mathbf{elif}\;\left(y \cdot 9\right) \cdot z \le 7.881184043757349 \cdot 10^{221}:\\ \;\;\;\;\left(x \cdot 2 - \left(\left(y \cdot 9\right) \cdot z\right) \cdot t\right) + \left(a \cdot 27\right) \cdot b\\ \mathbf{else}:\\ \;\;\;\;\left(x \cdot 2 - y \cdot \left(\left(9 \cdot z\right) \cdot t\right)\right) + \left(a \cdot 27\right) \cdot b\\ \end{array}\]

Reproduce

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