Average Error: 26.0 → 26.2
Time: 14.8s
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 1.040801148335406884298745436678592487814 \cdot 10^{55}:\\ \;\;\;\;\frac{\frac{x.im \cdot y.re - y.im \cdot x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}}{\sqrt{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 1.040801148335406884298745436678592487814 \cdot 10^{55}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - y.im \cdot x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}}{\sqrt{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 r3192654 = x_im;
        double r3192655 = y_re;
        double r3192656 = r3192654 * r3192655;
        double r3192657 = x_re;
        double r3192658 = y_im;
        double r3192659 = r3192657 * r3192658;
        double r3192660 = r3192656 - r3192659;
        double r3192661 = r3192655 * r3192655;
        double r3192662 = r3192658 * r3192658;
        double r3192663 = r3192661 + r3192662;
        double r3192664 = r3192660 / r3192663;
        return r3192664;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3192665 = y_im;
        double r3192666 = 1.0408011483354069e+55;
        bool r3192667 = r3192665 <= r3192666;
        double r3192668 = x_im;
        double r3192669 = y_re;
        double r3192670 = r3192668 * r3192669;
        double r3192671 = x_re;
        double r3192672 = r3192665 * r3192671;
        double r3192673 = r3192670 - r3192672;
        double r3192674 = r3192665 * r3192665;
        double r3192675 = r3192669 * r3192669;
        double r3192676 = r3192674 + r3192675;
        double r3192677 = sqrt(r3192676);
        double r3192678 = r3192673 / r3192677;
        double r3192679 = r3192678 / r3192677;
        double r3192680 = -r3192671;
        double r3192681 = r3192680 / r3192677;
        double r3192682 = r3192667 ? r3192679 : r3192681;
        return r3192682;
}

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 < 1.0408011483354069e+55

    1. Initial program 23.3

      \[\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-sqrt23.3

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

      \[\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}}}\]

    if 1.0408011483354069e+55 < y.im

    1. Initial program 35.1

      \[\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-sqrt35.1

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

      \[\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 36.3

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

      \[\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 simplification26.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le 1.040801148335406884298745436678592487814 \cdot 10^{55}:\\ \;\;\;\;\frac{\frac{x.im \cdot y.re - y.im \cdot x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}}{\sqrt{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 2019192 
(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))))