Average Error: 0.4 → 0.4
Time: 24.4s
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)\]
\[x.re \cdot \left(\left(x.re - x.im\right) \cdot \left(x.im + x.re\right) - \left(x.im + x.im\right) \cdot x.im\right)\]
\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)
x.re \cdot \left(\left(x.re - x.im\right) \cdot \left(x.im + x.re\right) - \left(x.im + x.im\right) \cdot x.im\right)
double f(double x_re, double x_im) {
        double r3161633 = x_re;
        double r3161634 = r3161633 * r3161633;
        double r3161635 = x_im;
        double r3161636 = r3161635 * r3161635;
        double r3161637 = r3161634 - r3161636;
        double r3161638 = r3161637 * r3161633;
        double r3161639 = r3161633 * r3161635;
        double r3161640 = r3161635 * r3161633;
        double r3161641 = r3161639 + r3161640;
        double r3161642 = r3161641 * r3161635;
        double r3161643 = r3161638 - r3161642;
        return r3161643;
}

double f(double x_re, double x_im) {
        double r3161644 = x_re;
        double r3161645 = x_im;
        double r3161646 = r3161644 - r3161645;
        double r3161647 = r3161645 + r3161644;
        double r3161648 = r3161646 * r3161647;
        double r3161649 = r3161645 + r3161645;
        double r3161650 = r3161649 * r3161645;
        double r3161651 = r3161648 - r3161650;
        double r3161652 = r3161644 * r3161651;
        return r3161652;
}

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. Simplified0.4

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

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

Reproduce

herbie shell --seed 2019134 +o rules:numerics
(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)))