Average Error: 0.4 → 0.4
Time: 47.2s
Precision: 64
\[\left(\left(\left(x.re \cdot x.re\right) - \left(x.im \cdot x.im\right)\right) \cdot x.re\right) - \left(\left(\frac{\left(x.re \cdot x.im\right)}{\left(x.im \cdot x.re\right)}\right) \cdot x.im\right)\]
\[\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.re\right) - \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.im\]
\left(\left(\left(x.re \cdot x.re\right) - \left(x.im \cdot x.im\right)\right) \cdot x.re\right) - \left(\left(\frac{\left(x.re \cdot x.im\right)}{\left(x.im \cdot x.re\right)}\right) \cdot x.im\right)
\left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.re\right) - \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.im
double f(double x_re, double x_im) {
        double r4048715 = x_re;
        double r4048716 = r4048715 * r4048715;
        double r4048717 = x_im;
        double r4048718 = r4048717 * r4048717;
        double r4048719 = r4048716 - r4048718;
        double r4048720 = r4048719 * r4048715;
        double r4048721 = r4048715 * r4048717;
        double r4048722 = r4048717 * r4048715;
        double r4048723 = r4048721 + r4048722;
        double r4048724 = r4048723 * r4048717;
        double r4048725 = r4048720 - r4048724;
        return r4048725;
}

double f(double x_re, double x_im) {
        double r4048726 = x_re;
        double r4048727 = x_im;
        double r4048728 = r4048726 + r4048727;
        double r4048729 = r4048726 - r4048727;
        double r4048730 = r4048729 * r4048726;
        double r4048731 = r4048728 * r4048730;
        double r4048732 = r4048726 * r4048727;
        double r4048733 = r4048727 * r4048726;
        double r4048734 = r4048732 + r4048733;
        double r4048735 = r4048734 * r4048727;
        double r4048736 = r4048731 - r4048735;
        return r4048736;
}

Error

Bits error versus x.re

Bits error versus x.im

Derivation

  1. Initial program 0.4

    \[\left(\left(\left(x.re \cdot x.re\right) - \left(x.im \cdot x.im\right)\right) \cdot x.re\right) - \left(\left(\frac{\left(x.re \cdot x.im\right)}{\left(x.im \cdot x.re\right)}\right) \cdot x.im\right)\]
  2. Using strategy rm
  3. Applied difference-of-squares0.4

    \[\leadsto \left(\color{blue}{\left(\left(\frac{x.re}{x.im}\right) \cdot \left(x.re - x.im\right)\right)} \cdot x.re\right) - \left(\left(\frac{\left(x.re \cdot x.im\right)}{\left(x.im \cdot x.re\right)}\right) \cdot x.im\right)\]
  4. Using strategy rm
  5. Applied associate-*l*0.4

    \[\leadsto \color{blue}{\left(\left(\frac{x.re}{x.im}\right) \cdot \left(\left(x.re - x.im\right) \cdot x.re\right)\right)} - \left(\left(\frac{\left(x.re \cdot x.im\right)}{\left(x.im \cdot x.re\right)}\right) \cdot x.im\right)\]
  6. Final simplification0.4

    \[\leadsto \left(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.re\right) - \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.im\]

Reproduce

herbie shell --seed 2019135 
(FPCore (x.re x.im)
  :name "math.cube on complex, real part"
  (-.p16 (*.p16 (-.p16 (*.p16 x.re x.re) (*.p16 x.im x.im)) x.re) (*.p16 (+.p16 (*.p16 x.re x.im) (*.p16 x.im x.re)) x.im)))