Average Error: 3.6 → 2.0
Time: 17.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}\;t \le 1.551449981725597111445963033522555703704 \cdot 10^{-26}:\\ \;\;\;\;\left(x \cdot 2 - y \cdot \left(\left(z \cdot 9\right) \cdot t\right)\right) + \left(a \cdot 27\right) \cdot b\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(t \cdot \left(z \cdot y\right), -9, 2 \cdot x\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}\;t \le 1.551449981725597111445963033522555703704 \cdot 10^{-26}:\\
\;\;\;\;\left(x \cdot 2 - y \cdot \left(\left(z \cdot 9\right) \cdot t\right)\right) + \left(a \cdot 27\right) \cdot b\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t \cdot \left(z \cdot y\right), -9, 2 \cdot x\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 r449296 = x;
        double r449297 = 2.0;
        double r449298 = r449296 * r449297;
        double r449299 = y;
        double r449300 = 9.0;
        double r449301 = r449299 * r449300;
        double r449302 = z;
        double r449303 = r449301 * r449302;
        double r449304 = t;
        double r449305 = r449303 * r449304;
        double r449306 = r449298 - r449305;
        double r449307 = a;
        double r449308 = 27.0;
        double r449309 = r449307 * r449308;
        double r449310 = b;
        double r449311 = r449309 * r449310;
        double r449312 = r449306 + r449311;
        return r449312;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r449313 = t;
        double r449314 = 1.551449981725597e-26;
        bool r449315 = r449313 <= r449314;
        double r449316 = x;
        double r449317 = 2.0;
        double r449318 = r449316 * r449317;
        double r449319 = y;
        double r449320 = z;
        double r449321 = 9.0;
        double r449322 = r449320 * r449321;
        double r449323 = r449322 * r449313;
        double r449324 = r449319 * r449323;
        double r449325 = r449318 - r449324;
        double r449326 = a;
        double r449327 = 27.0;
        double r449328 = r449326 * r449327;
        double r449329 = b;
        double r449330 = r449328 * r449329;
        double r449331 = r449325 + r449330;
        double r449332 = r449320 * r449319;
        double r449333 = r449313 * r449332;
        double r449334 = -r449321;
        double r449335 = r449317 * r449316;
        double r449336 = fma(r449333, r449334, r449335);
        double r449337 = r449336 + r449330;
        double r449338 = r449315 ? r449331 : r449337;
        return r449338;
}

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.6
Target2.6
Herbie2.0
\[\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 t < 1.551449981725597e-26

    1. Initial program 4.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. Using strategy rm
    3. Applied associate-*l*4.5

      \[\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. Simplified4.5

      \[\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*2.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\]

    if 1.551449981725597e-26 < t

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

      \[\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. Simplified7.2

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

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

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

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

Reproduce

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