Average Error: 7.3 → 0.7
Time: 40.2s
Precision: 64
\[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\]
\[\left(\left(\left(x.re - x.im\right) \cdot \left(\sqrt[3]{x.im} \cdot \sqrt[3]{x.im}\right)\right) \cdot \sqrt[3]{x.im}\right) \cdot \left(x.re + x.im\right) + \left(x.im \cdot x.re + x.im \cdot x.re\right) \cdot x.re\]
\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
\left(\left(\left(x.re - x.im\right) \cdot \left(\sqrt[3]{x.im} \cdot \sqrt[3]{x.im}\right)\right) \cdot \sqrt[3]{x.im}\right) \cdot \left(x.re + x.im\right) + \left(x.im \cdot x.re + x.im \cdot x.re\right) \cdot x.re
double f(double x_re, double x_im) {
        double r9619620 = x_re;
        double r9619621 = r9619620 * r9619620;
        double r9619622 = x_im;
        double r9619623 = r9619622 * r9619622;
        double r9619624 = r9619621 - r9619623;
        double r9619625 = r9619624 * r9619622;
        double r9619626 = r9619620 * r9619622;
        double r9619627 = r9619622 * r9619620;
        double r9619628 = r9619626 + r9619627;
        double r9619629 = r9619628 * r9619620;
        double r9619630 = r9619625 + r9619629;
        return r9619630;
}

double f(double x_re, double x_im) {
        double r9619631 = x_re;
        double r9619632 = x_im;
        double r9619633 = r9619631 - r9619632;
        double r9619634 = cbrt(r9619632);
        double r9619635 = r9619634 * r9619634;
        double r9619636 = r9619633 * r9619635;
        double r9619637 = r9619636 * r9619634;
        double r9619638 = r9619631 + r9619632;
        double r9619639 = r9619637 * r9619638;
        double r9619640 = r9619632 * r9619631;
        double r9619641 = r9619640 + r9619640;
        double r9619642 = r9619641 * r9619631;
        double r9619643 = r9619639 + r9619642;
        return r9619643;
}

Error

Bits error versus x.re

Bits error versus x.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original7.3
Target0.2
Herbie0.7
\[\left(x.re \cdot x.im\right) \cdot \left(2 \cdot x.re\right) + \left(x.im \cdot \left(x.re - x.im\right)\right) \cdot \left(x.re + x.im\right)\]

Derivation

  1. Initial program 7.3

    \[\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\]
  2. Using strategy rm
  3. Applied difference-of-squares7.3

    \[\leadsto \color{blue}{\left(\left(x.re + x.im\right) \cdot \left(x.re - x.im\right)\right)} \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\]
  4. Applied associate-*l*0.2

    \[\leadsto \color{blue}{\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\]
  5. Using strategy rm
  6. Applied add-cube-cbrt0.7

    \[\leadsto \left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot \color{blue}{\left(\left(\sqrt[3]{x.im} \cdot \sqrt[3]{x.im}\right) \cdot \sqrt[3]{x.im}\right)}\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\]
  7. Applied associate-*r*0.7

    \[\leadsto \left(x.re + x.im\right) \cdot \color{blue}{\left(\left(\left(x.re - x.im\right) \cdot \left(\sqrt[3]{x.im} \cdot \sqrt[3]{x.im}\right)\right) \cdot \sqrt[3]{x.im}\right)} + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re\]
  8. Final simplification0.7

    \[\leadsto \left(\left(\left(x.re - x.im\right) \cdot \left(\sqrt[3]{x.im} \cdot \sqrt[3]{x.im}\right)\right) \cdot \sqrt[3]{x.im}\right) \cdot \left(x.re + x.im\right) + \left(x.im \cdot x.re + x.im \cdot x.re\right) \cdot x.re\]

Reproduce

herbie shell --seed 2019200 
(FPCore (x.re x.im)
  :name "math.cube on complex, imaginary part"

  :herbie-target
  (+ (* (* x.re x.im) (* 2.0 x.re)) (* (* x.im (- x.re x.im)) (+ x.re x.im)))

  (+ (* (- (* x.re x.re) (* x.im x.im)) x.im) (* (+ (* x.re x.im) (* x.im x.re)) x.re)))