Average Error: 7.1 → 0.5
Time: 20.6s
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(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im + x.re\right) + \sqrt[3]{x.re} \cdot \left(\left(\left(x.re \cdot \left(x.im + x.im\right)\right) \cdot \sqrt[3]{x.re}\right) \cdot \sqrt[3]{x.re}\right)\]
\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(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im + x.re\right) + \sqrt[3]{x.re} \cdot \left(\left(\left(x.re \cdot \left(x.im + x.im\right)\right) \cdot \sqrt[3]{x.re}\right) \cdot \sqrt[3]{x.re}\right)
double f(double x_re, double x_im) {
        double r10061779 = x_re;
        double r10061780 = r10061779 * r10061779;
        double r10061781 = x_im;
        double r10061782 = r10061781 * r10061781;
        double r10061783 = r10061780 - r10061782;
        double r10061784 = r10061783 * r10061781;
        double r10061785 = r10061779 * r10061781;
        double r10061786 = r10061781 * r10061779;
        double r10061787 = r10061785 + r10061786;
        double r10061788 = r10061787 * r10061779;
        double r10061789 = r10061784 + r10061788;
        return r10061789;
}

double f(double x_re, double x_im) {
        double r10061790 = x_re;
        double r10061791 = x_im;
        double r10061792 = r10061790 - r10061791;
        double r10061793 = r10061792 * r10061791;
        double r10061794 = r10061791 + r10061790;
        double r10061795 = r10061793 * r10061794;
        double r10061796 = cbrt(r10061790);
        double r10061797 = r10061791 + r10061791;
        double r10061798 = r10061790 * r10061797;
        double r10061799 = r10061798 * r10061796;
        double r10061800 = r10061799 * r10061796;
        double r10061801 = r10061796 * r10061800;
        double r10061802 = r10061795 + r10061801;
        return r10061802;
}

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.1
Target0.3
Herbie0.5
\[\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.1

    \[\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.1

    \[\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.3

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

    \[\leadsto \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 \color{blue}{\left(\left(\sqrt[3]{x.re} \cdot \sqrt[3]{x.re}\right) \cdot \sqrt[3]{x.re}\right)}\]
  7. Applied associate-*r*0.5

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

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

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

Reproduce

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

  :herbie-target
  (+ (* (* x.re x.im) (* 2 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)))