Average Error: 32.8 → 10.3
Time: 6.9s
Precision: 64
\[e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\]
\[\begin{array}{l} \mathbf{if}\;x.re \le -1.0320343030662579 \cdot 10^{-39}:\\ \;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le -7.0065628327462943 \cdot 10^{-138}:\\ \;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le -1.596491671996702 \cdot 10^{-172}:\\ \;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le -6.9045443592551714 \cdot 10^{-255}:\\ \;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le -3.10085515308595001 \cdot 10^{-308}:\\ \;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le 2.99263778611433918 \cdot 10^{-130}:\\ \;\;\;\;\frac{e^{-\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\\ \mathbf{elif}\;x.re \le 2.45124835309062439:\\ \;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{else}:\\ \;\;\;\;\frac{e^{-\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\\ \end{array}\]
e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)
\begin{array}{l}
\mathbf{if}\;x.re \le -1.0320343030662579 \cdot 10^{-39}:\\
\;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\mathbf{elif}\;x.re \le -7.0065628327462943 \cdot 10^{-138}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\mathbf{elif}\;x.re \le -1.596491671996702 \cdot 10^{-172}:\\
\;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\mathbf{elif}\;x.re \le -6.9045443592551714 \cdot 10^{-255}:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\mathbf{elif}\;x.re \le -3.10085515308595001 \cdot 10^{-308}:\\
\;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\mathbf{elif}\;x.re \le 2.99263778611433918 \cdot 10^{-130}:\\
\;\;\;\;\frac{e^{-\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\\

\mathbf{elif}\;x.re \le 2.45124835309062439:\\
\;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\mathbf{else}:\\
\;\;\;\;\frac{e^{-\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r11239 = x_re;
        double r11240 = r11239 * r11239;
        double r11241 = x_im;
        double r11242 = r11241 * r11241;
        double r11243 = r11240 + r11242;
        double r11244 = sqrt(r11243);
        double r11245 = log(r11244);
        double r11246 = y_re;
        double r11247 = r11245 * r11246;
        double r11248 = atan2(r11241, r11239);
        double r11249 = y_im;
        double r11250 = r11248 * r11249;
        double r11251 = r11247 - r11250;
        double r11252 = exp(r11251);
        double r11253 = r11245 * r11249;
        double r11254 = r11248 * r11246;
        double r11255 = r11253 + r11254;
        double r11256 = cos(r11255);
        double r11257 = r11252 * r11256;
        return r11257;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r11258 = x_re;
        double r11259 = -1.0320343030662579e-39;
        bool r11260 = r11258 <= r11259;
        double r11261 = -1.0;
        double r11262 = r11261 * r11258;
        double r11263 = log(r11262);
        double r11264 = y_re;
        double r11265 = r11263 * r11264;
        double r11266 = x_im;
        double r11267 = atan2(r11266, r11258);
        double r11268 = y_im;
        double r11269 = r11267 * r11268;
        double r11270 = r11265 - r11269;
        double r11271 = exp(r11270);
        double r11272 = 1.0;
        double r11273 = r11271 * r11272;
        double r11274 = -7.006562832746294e-138;
        bool r11275 = r11258 <= r11274;
        double r11276 = r11258 * r11258;
        double r11277 = r11266 * r11266;
        double r11278 = r11276 + r11277;
        double r11279 = sqrt(r11278);
        double r11280 = log(r11279);
        double r11281 = r11280 * r11264;
        double r11282 = r11281 - r11269;
        double r11283 = exp(r11282);
        double r11284 = r11283 * r11272;
        double r11285 = -1.5964916719967018e-172;
        bool r11286 = r11258 <= r11285;
        double r11287 = -6.904544359255171e-255;
        bool r11288 = r11258 <= r11287;
        double r11289 = -3.10085515308595e-308;
        bool r11290 = r11258 <= r11289;
        double r11291 = 2.992637786114339e-130;
        bool r11292 = r11258 <= r11291;
        double r11293 = exp(r11269);
        double r11294 = log(r11293);
        double r11295 = -r11294;
        double r11296 = exp(r11295);
        double r11297 = r11272 / r11258;
        double r11298 = pow(r11297, r11264);
        double r11299 = r11296 / r11298;
        double r11300 = r11299 * r11272;
        double r11301 = 2.4512483530906244;
        bool r11302 = r11258 <= r11301;
        double r11303 = r11302 ? r11284 : r11300;
        double r11304 = r11292 ? r11300 : r11303;
        double r11305 = r11290 ? r11273 : r11304;
        double r11306 = r11288 ? r11284 : r11305;
        double r11307 = r11286 ? r11273 : r11306;
        double r11308 = r11275 ? r11284 : r11307;
        double r11309 = r11260 ? r11273 : r11308;
        return r11309;
}

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 3 regimes
  2. if x.re < -1.0320343030662579e-39 or -7.006562832746294e-138 < x.re < -1.5964916719967018e-172 or -6.904544359255171e-255 < x.re < -3.10085515308595e-308

    1. Initial program 34.7

      \[e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\]
    2. Taylor expanded around 0 19.3

      \[\leadsto e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \color{blue}{1}\]
    3. Taylor expanded around -inf 3.8

      \[\leadsto e^{\log \color{blue}{\left(-1 \cdot x.re\right)} \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\]

    if -1.0320343030662579e-39 < x.re < -7.006562832746294e-138 or -1.5964916719967018e-172 < x.re < -6.904544359255171e-255 or 2.992637786114339e-130 < x.re < 2.4512483530906244

    1. Initial program 20.3

      \[e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\]
    2. Taylor expanded around 0 11.7

      \[\leadsto e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \color{blue}{1}\]

    if -3.10085515308595e-308 < x.re < 2.992637786114339e-130 or 2.4512483530906244 < x.re

    1. Initial program 38.9

      \[e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \cos \left(\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.im + \tan^{-1}_* \frac{x.im}{x.re} \cdot y.re\right)\]
    2. Taylor expanded around 0 24.2

      \[\leadsto e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot \color{blue}{1}\]
    3. Taylor expanded around inf 11.5

      \[\leadsto \color{blue}{e^{-\left(\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im + y.re \cdot \log \left(\frac{1}{x.re}\right)\right)}} \cdot 1\]
    4. Simplified14.9

      \[\leadsto \color{blue}{\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{1}{x.re}\right)}^{y.re}}} \cdot 1\]
    5. Using strategy rm
    6. Applied add-log-exp14.9

      \[\leadsto \frac{e^{-\color{blue}{\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\]
  3. Recombined 3 regimes into one program.
  4. Final simplification10.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;x.re \le -1.0320343030662579 \cdot 10^{-39}:\\ \;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le -7.0065628327462943 \cdot 10^{-138}:\\ \;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le -1.596491671996702 \cdot 10^{-172}:\\ \;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le -6.9045443592551714 \cdot 10^{-255}:\\ \;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le -3.10085515308595001 \cdot 10^{-308}:\\ \;\;\;\;e^{\log \left(-1 \cdot x.re\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le 2.99263778611433918 \cdot 10^{-130}:\\ \;\;\;\;\frac{e^{-\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\\ \mathbf{elif}\;x.re \le 2.45124835309062439:\\ \;\;\;\;e^{\log \left(\sqrt{x.re \cdot x.re + x.im \cdot x.im}\right) \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{else}:\\ \;\;\;\;\frac{e^{-\log \left(e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}\right)}}{{\left(\frac{1}{x.re}\right)}^{y.re}} \cdot 1\\ \end{array}\]

Reproduce

herbie shell --seed 2020056 
(FPCore (x.re x.im y.re y.im)
  :name "powComplex, real part"
  :precision binary64
  (* (exp (- (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.re) (* (atan2 x.im x.re) y.im))) (cos (+ (* (log (sqrt (+ (* x.re x.re) (* x.im x.im)))) y.im) (* (atan2 x.im x.re) y.re)))))