Average Error: 25.4 → 25.2
Time: 15.9s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\begin{array}{l} \mathbf{if}\;y.im \le 3.241508515477217 \cdot 10^{+87}:\\ \;\;\;\;\frac{x.im \cdot y.re - y.im \cdot x.re}{y.im \cdot y.im + y.re \cdot y.re}\\ \mathbf{else}:\\ \;\;\;\;\frac{-x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \end{array}\]
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\begin{array}{l}
\mathbf{if}\;y.im \le 3.241508515477217 \cdot 10^{+87}:\\
\;\;\;\;\frac{x.im \cdot y.re - y.im \cdot x.re}{y.im \cdot y.im + y.re \cdot y.re}\\

\mathbf{else}:\\
\;\;\;\;\frac{-x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r2043361 = x_im;
        double r2043362 = y_re;
        double r2043363 = r2043361 * r2043362;
        double r2043364 = x_re;
        double r2043365 = y_im;
        double r2043366 = r2043364 * r2043365;
        double r2043367 = r2043363 - r2043366;
        double r2043368 = r2043362 * r2043362;
        double r2043369 = r2043365 * r2043365;
        double r2043370 = r2043368 + r2043369;
        double r2043371 = r2043367 / r2043370;
        return r2043371;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2043372 = y_im;
        double r2043373 = 3.241508515477217e+87;
        bool r2043374 = r2043372 <= r2043373;
        double r2043375 = x_im;
        double r2043376 = y_re;
        double r2043377 = r2043375 * r2043376;
        double r2043378 = x_re;
        double r2043379 = r2043372 * r2043378;
        double r2043380 = r2043377 - r2043379;
        double r2043381 = r2043372 * r2043372;
        double r2043382 = r2043376 * r2043376;
        double r2043383 = r2043381 + r2043382;
        double r2043384 = r2043380 / r2043383;
        double r2043385 = -r2043378;
        double r2043386 = sqrt(r2043383);
        double r2043387 = r2043385 / r2043386;
        double r2043388 = r2043374 ? r2043384 : r2043387;
        return r2043388;
}

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if y.im < 3.241508515477217e+87

    1. Initial program 22.5

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

    if 3.241508515477217e+87 < y.im

    1. Initial program 37.8

      \[\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-sqrt37.8

      \[\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*37.8

      \[\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. Taylor expanded around 0 37.0

      \[\leadsto \frac{\color{blue}{-1 \cdot x.re}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    6. Simplified37.0

      \[\leadsto \frac{\color{blue}{-x.re}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification25.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le 3.241508515477217 \cdot 10^{+87}:\\ \;\;\;\;\frac{x.im \cdot y.re - y.im \cdot x.re}{y.im \cdot y.im + y.re \cdot y.re}\\ \mathbf{else}:\\ \;\;\;\;\frac{-x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019132 
(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))))