Average Error: 25.5 → 25.5
Time: 43.9s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{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 r5234139 = x_im;
        double r5234140 = y_re;
        double r5234141 = r5234139 * r5234140;
        double r5234142 = x_re;
        double r5234143 = y_im;
        double r5234144 = r5234142 * r5234143;
        double r5234145 = r5234141 - r5234144;
        double r5234146 = r5234140 * r5234140;
        double r5234147 = r5234143 * r5234143;
        double r5234148 = r5234146 + r5234147;
        double r5234149 = r5234145 / r5234148;
        return r5234149;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r5234150 = x_im;
        double r5234151 = y_re;
        double r5234152 = r5234150 * r5234151;
        double r5234153 = x_re;
        double r5234154 = y_im;
        double r5234155 = r5234153 * r5234154;
        double r5234156 = r5234152 - r5234155;
        double r5234157 = r5234151 * r5234151;
        double r5234158 = r5234154 * r5234154;
        double r5234159 = r5234157 + r5234158;
        double r5234160 = sqrt(r5234159);
        double r5234161 = r5234156 / r5234160;
        double r5234162 = r5234161 / r5234160;
        return r5234162;
}

\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{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 25.5

    \[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt25.5

    \[\leadsto \frac{x.im \cdot y.re - x.re \cdot y.im}{\color{blue}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  4. Applied associate-/r*25.5

    \[\leadsto \color{blue}{\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  5. Final simplification25.5

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

Reproduce

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