Average Error: 33.3 → 11.3
Time: 7.5s
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 -8.512054391915101604480402838143546852923 \cdot 10^{-257}:\\ \;\;\;\;\frac{{\left(-1 \cdot x.re\right)}^{y.re}}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot 1\\ \mathbf{elif}\;x.re \le -2.448562128644886468589051132244914536457 \cdot 10^{-310}:\\ \;\;\;\;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 8.333241630915608797286868021117327942766 \cdot 10^{-157}:\\ \;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le 0.0496669033130894138627908773742092307657:\\ \;\;\;\;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}:\\ \;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \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 -8.512054391915101604480402838143546852923 \cdot 10^{-257}:\\
\;\;\;\;\frac{{\left(-1 \cdot x.re\right)}^{y.re}}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot 1\\

\mathbf{elif}\;x.re \le -2.448562128644886468589051132244914536457 \cdot 10^{-310}:\\
\;\;\;\;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 8.333241630915608797286868021117327942766 \cdot 10^{-157}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\mathbf{elif}\;x.re \le 0.0496669033130894138627908773742092307657:\\
\;\;\;\;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}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r13021 = x_re;
        double r13022 = r13021 * r13021;
        double r13023 = x_im;
        double r13024 = r13023 * r13023;
        double r13025 = r13022 + r13024;
        double r13026 = sqrt(r13025);
        double r13027 = log(r13026);
        double r13028 = y_re;
        double r13029 = r13027 * r13028;
        double r13030 = atan2(r13023, r13021);
        double r13031 = y_im;
        double r13032 = r13030 * r13031;
        double r13033 = r13029 - r13032;
        double r13034 = exp(r13033);
        double r13035 = r13027 * r13031;
        double r13036 = r13030 * r13028;
        double r13037 = r13035 + r13036;
        double r13038 = cos(r13037);
        double r13039 = r13034 * r13038;
        return r13039;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r13040 = x_re;
        double r13041 = -8.512054391915102e-257;
        bool r13042 = r13040 <= r13041;
        double r13043 = -1.0;
        double r13044 = r13043 * r13040;
        double r13045 = y_re;
        double r13046 = pow(r13044, r13045);
        double r13047 = x_im;
        double r13048 = atan2(r13047, r13040);
        double r13049 = y_im;
        double r13050 = r13048 * r13049;
        double r13051 = exp(r13050);
        double r13052 = r13046 / r13051;
        double r13053 = 1.0;
        double r13054 = r13052 * r13053;
        double r13055 = -2.4485621286449e-310;
        bool r13056 = r13040 <= r13055;
        double r13057 = r13040 * r13040;
        double r13058 = r13047 * r13047;
        double r13059 = r13057 + r13058;
        double r13060 = sqrt(r13059);
        double r13061 = log(r13060);
        double r13062 = r13061 * r13045;
        double r13063 = r13062 - r13050;
        double r13064 = exp(r13063);
        double r13065 = r13064 * r13053;
        double r13066 = 8.333241630915609e-157;
        bool r13067 = r13040 <= r13066;
        double r13068 = log(r13040);
        double r13069 = r13068 * r13045;
        double r13070 = r13069 - r13050;
        double r13071 = exp(r13070);
        double r13072 = r13071 * r13053;
        double r13073 = 0.049666903313089414;
        bool r13074 = r13040 <= r13073;
        double r13075 = r13074 ? r13065 : r13072;
        double r13076 = r13067 ? r13072 : r13075;
        double r13077 = r13056 ? r13065 : r13076;
        double r13078 = r13042 ? r13054 : r13077;
        return r13078;
}

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 < -8.512054391915102e-257

    1. Initial program 31.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 17.6

      \[\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. Using strategy rm
    4. Applied exp-diff22.4

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

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

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

    if -8.512054391915102e-257 < x.re < -2.4485621286449e-310 or 8.333241630915609e-157 < x.re < 0.049666903313089414

    1. Initial program 21.0

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

      \[\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 -2.4485621286449e-310 < x.re < 8.333241630915609e-157 or 0.049666903313089414 < x.re

    1. Initial program 40.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 25.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x.re \le -8.512054391915101604480402838143546852923 \cdot 10^{-257}:\\ \;\;\;\;\frac{{\left(-1 \cdot x.re\right)}^{y.re}}{e^{\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}} \cdot 1\\ \mathbf{elif}\;x.re \le -2.448562128644886468589051132244914536457 \cdot 10^{-310}:\\ \;\;\;\;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 8.333241630915608797286868021117327942766 \cdot 10^{-157}:\\ \;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le 0.0496669033130894138627908773742092307657:\\ \;\;\;\;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}:\\ \;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \end{array}\]

Reproduce

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