Average Error: 1.1 → 1.1
Time: 9.8s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
double f(double x_re, double x_im, double y_re, double y_im) {
        double r1317468 = x_im;
        double r1317469 = y_re;
        double r1317470 = r1317468 * r1317469;
        double r1317471 = x_re;
        double r1317472 = y_im;
        double r1317473 = r1317471 * r1317472;
        double r1317474 = r1317470 - r1317473;
        double r1317475 = r1317469 * r1317469;
        double r1317476 = r1317472 * r1317472;
        double r1317477 = r1317475 + r1317476;
        double r1317478 = r1317474 / r1317477;
        return r1317478;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1317479 = x_im;
        double r1317480 = y_re;
        double r1317481 = r1317479 * r1317480;
        double r1317482 = x_re;
        double r1317483 = y_im;
        double r1317484 = r1317482 * r1317483;
        double r1317485 = r1317481 - r1317484;
        double r1317486 = r1317480 * r1317480;
        double r1317487 = r1317483 * r1317483;
        double r1317488 = r1317486 + r1317487;
        double r1317489 = r1317485 / r1317488;
        return r1317489;
}

\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Derivation

  1. Initial program 1.1

    \[\frac{\left(\left(x.im \cdot y.re\right) - \left(x.re \cdot y.im\right)\right)}{\left(\frac{\left(y.re \cdot y.re\right)}{\left(y.im \cdot y.im\right)}\right)}\]
  2. Final simplification1.1

    \[\leadsto \frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]

Reproduce

herbie shell --seed 2019101 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
  :name "_divideComplex, imaginary part"
  (/.p16 (-.p16 (*.p16 x.im y.re) (*.p16 x.re y.im)) (+.p16 (*.p16 y.re y.re) (*.p16 y.im y.im))))