Average Error: 33.2 → 13.5
Time: 7.3s
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.70372452559463588 \cdot 10^{-23}:\\ \;\;\;\;\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{-1}{x.re}\right)}^{y.re}} \cdot 1\\ \mathbf{elif}\;x.re \le -3.01563396311001078 \cdot 10^{-182}:\\ \;\;\;\;\frac{\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) \cdot {\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}}\\ \mathbf{elif}\;x.re \le 1.457786286792 \cdot 10^{-311}:\\ \;\;\;\;\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{-1}{x.re}\right)}^{y.re}} \cdot 1\\ \mathbf{elif}\;x.re \le 3.3637837218998096 \cdot 10^{-91}:\\ \;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le 1.2712943529250103 \cdot 10^{-21}:\\ \;\;\;\;e^{\log \left(\log \left(e^{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\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 -1.70372452559463588 \cdot 10^{-23}:\\
\;\;\;\;\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{-1}{x.re}\right)}^{y.re}} \cdot 1\\

\mathbf{elif}\;x.re \le -3.01563396311001078 \cdot 10^{-182}:\\
\;\;\;\;\frac{\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) \cdot {\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}}\\

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

\mathbf{elif}\;x.re \le 3.3637837218998096 \cdot 10^{-91}:\\
\;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\

\mathbf{elif}\;x.re \le 1.2712943529250103 \cdot 10^{-21}:\\
\;\;\;\;e^{\log \left(\log \left(e^{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\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 r14566 = x_re;
        double r14567 = r14566 * r14566;
        double r14568 = x_im;
        double r14569 = r14568 * r14568;
        double r14570 = r14567 + r14569;
        double r14571 = sqrt(r14570);
        double r14572 = log(r14571);
        double r14573 = y_re;
        double r14574 = r14572 * r14573;
        double r14575 = atan2(r14568, r14566);
        double r14576 = y_im;
        double r14577 = r14575 * r14576;
        double r14578 = r14574 - r14577;
        double r14579 = exp(r14578);
        double r14580 = r14572 * r14576;
        double r14581 = r14575 * r14573;
        double r14582 = r14580 + r14581;
        double r14583 = cos(r14582);
        double r14584 = r14579 * r14583;
        return r14584;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r14585 = x_re;
        double r14586 = -1.703724525594636e-23;
        bool r14587 = r14585 <= r14586;
        double r14588 = x_im;
        double r14589 = atan2(r14588, r14585);
        double r14590 = y_im;
        double r14591 = r14589 * r14590;
        double r14592 = -r14591;
        double r14593 = exp(r14592);
        double r14594 = -1.0;
        double r14595 = r14594 / r14585;
        double r14596 = y_re;
        double r14597 = pow(r14595, r14596);
        double r14598 = r14593 / r14597;
        double r14599 = 1.0;
        double r14600 = r14598 * r14599;
        double r14601 = -3.015633963110011e-182;
        bool r14602 = r14585 <= r14601;
        double r14603 = r14585 * r14585;
        double r14604 = r14588 * r14588;
        double r14605 = r14603 + r14604;
        double r14606 = sqrt(r14605);
        double r14607 = log(r14606);
        double r14608 = r14607 * r14590;
        double r14609 = r14589 * r14596;
        double r14610 = r14608 + r14609;
        double r14611 = cos(r14610);
        double r14612 = pow(r14606, r14596);
        double r14613 = r14611 * r14612;
        double r14614 = exp(r14591);
        double r14615 = r14613 / r14614;
        double r14616 = 1.457786286792e-311;
        bool r14617 = r14585 <= r14616;
        double r14618 = 3.3637837218998096e-91;
        bool r14619 = r14585 <= r14618;
        double r14620 = log(r14585);
        double r14621 = r14620 * r14596;
        double r14622 = r14621 - r14591;
        double r14623 = exp(r14622);
        double r14624 = r14623 * r14599;
        double r14625 = 1.2712943529250103e-21;
        bool r14626 = r14585 <= r14625;
        double r14627 = exp(r14606);
        double r14628 = log(r14627);
        double r14629 = log(r14628);
        double r14630 = r14629 * r14596;
        double r14631 = r14630 - r14591;
        double r14632 = exp(r14631);
        double r14633 = r14632 * r14599;
        double r14634 = r14626 ? r14633 : r14624;
        double r14635 = r14619 ? r14624 : r14634;
        double r14636 = r14617 ? r14600 : r14635;
        double r14637 = r14602 ? r14615 : r14636;
        double r14638 = r14587 ? r14600 : r14637;
        return r14638;
}

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 4 regimes
  2. if x.re < -1.703724525594636e-23 or -3.015633963110011e-182 < x.re < 1.457786286792e-311

    1. Initial program 37.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 20.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}\]
    3. Taylor expanded around -inf 3.7

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

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

    if -1.703724525594636e-23 < x.re < -3.015633963110011e-182

    1. Initial program 17.5

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

      \[\leadsto \color{blue}{\frac{\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) \cdot {\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}}}\]

    if 1.457786286792e-311 < x.re < 3.3637837218998096e-91 or 1.2712943529250103e-21 < x.re

    1. Initial program 36.2

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

      \[\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.4

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

    if 3.3637837218998096e-91 < x.re < 1.2712943529250103e-21

    1. Initial program 20.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 14.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. Using strategy rm
    4. Applied add-log-exp33.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x.re \le -1.70372452559463588 \cdot 10^{-23}:\\ \;\;\;\;\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{-1}{x.re}\right)}^{y.re}} \cdot 1\\ \mathbf{elif}\;x.re \le -3.01563396311001078 \cdot 10^{-182}:\\ \;\;\;\;\frac{\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) \cdot {\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}}\\ \mathbf{elif}\;x.re \le 1.457786286792 \cdot 10^{-311}:\\ \;\;\;\;\frac{e^{-\tan^{-1}_* \frac{x.im}{x.re} \cdot y.im}}{{\left(\frac{-1}{x.re}\right)}^{y.re}} \cdot 1\\ \mathbf{elif}\;x.re \le 3.3637837218998096 \cdot 10^{-91}:\\ \;\;\;\;e^{\log x.re \cdot y.re - \tan^{-1}_* \frac{x.im}{x.re} \cdot y.im} \cdot 1\\ \mathbf{elif}\;x.re \le 1.2712943529250103 \cdot 10^{-21}:\\ \;\;\;\;e^{\log \left(\log \left(e^{\sqrt{x.re \cdot x.re + x.im \cdot x.im}}\right)\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 2020049 
(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)))))