Average Error: 26.5 → 16.2
Time: 3.7s
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.re \le -4.4263537617510411 \cdot 10^{138} \lor \neg \left(y.re \le 8.23624815355425478 \cdot 10^{-31}\right):\\ \;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{\frac{{y.re}^{2} + {y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\ \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.re \le -4.4263537617510411 \cdot 10^{138} \lor \neg \left(y.re \le 8.23624815355425478 \cdot 10^{-31}\right):\\
\;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\

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

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r76141 = x_im;
        double r76142 = y_re;
        double r76143 = r76141 * r76142;
        double r76144 = x_re;
        double r76145 = y_im;
        double r76146 = r76144 * r76145;
        double r76147 = r76143 - r76146;
        double r76148 = r76142 * r76142;
        double r76149 = r76145 * r76145;
        double r76150 = r76148 + r76149;
        double r76151 = r76147 / r76150;
        return r76151;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r76152 = y_re;
        double r76153 = -4.426353761751041e+138;
        bool r76154 = r76152 <= r76153;
        double r76155 = 8.236248153554255e-31;
        bool r76156 = r76152 <= r76155;
        double r76157 = !r76156;
        bool r76158 = r76154 || r76157;
        double r76159 = x_im;
        double r76160 = y_im;
        double r76161 = 2.0;
        double r76162 = pow(r76160, r76161);
        double r76163 = r76162 / r76152;
        double r76164 = r76152 + r76163;
        double r76165 = r76159 / r76164;
        double r76166 = x_re;
        double r76167 = r76166 * r76160;
        double r76168 = r76152 * r76152;
        double r76169 = r76160 * r76160;
        double r76170 = r76168 + r76169;
        double r76171 = r76167 / r76170;
        double r76172 = r76165 - r76171;
        double r76173 = pow(r76152, r76161);
        double r76174 = r76173 + r76162;
        double r76175 = r76174 / r76152;
        double r76176 = r76159 / r76175;
        double r76177 = r76170 / r76160;
        double r76178 = r76166 / r76177;
        double r76179 = r76176 - r76178;
        double r76180 = r76158 ? r76172 : r76179;
        return r76180;
}

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.re < -4.426353761751041e+138 or 8.236248153554255e-31 < y.re

    1. Initial program 34.9

      \[\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 div-sub34.9

      \[\leadsto \color{blue}{\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}}\]
    4. Using strategy rm
    5. Applied associate-/l*32.2

      \[\leadsto \color{blue}{\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    6. Simplified32.2

      \[\leadsto \frac{x.im}{\color{blue}{\frac{{y.re}^{2} + {y.im}^{2}}{y.re}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    7. Taylor expanded around 0 15.5

      \[\leadsto \frac{x.im}{\color{blue}{y.re + \frac{{y.im}^{2}}{y.re}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]

    if -4.426353761751041e+138 < y.re < 8.236248153554255e-31

    1. Initial program 19.9

      \[\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 div-sub19.9

      \[\leadsto \color{blue}{\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}}\]
    4. Using strategy rm
    5. Applied associate-/l*19.3

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

      \[\leadsto \frac{x.im}{\color{blue}{\frac{{y.re}^{2} + {y.im}^{2}}{y.re}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    7. Using strategy rm
    8. Applied associate-/l*16.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.re \le -4.4263537617510411 \cdot 10^{138} \lor \neg \left(y.re \le 8.23624815355425478 \cdot 10^{-31}\right):\\ \;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{\frac{{y.re}^{2} + {y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\ \end{array}\]

Reproduce

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