Average Error: 30.6 → 16.9
Time: 1.2m
Precision: 64
\[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
\[\begin{array}{l} \mathbf{if}\;im \le -1.3319832853049099 \cdot 10^{+154}:\\ \;\;\;\;\frac{\log base \cdot \log \left(-re\right)}{\log base \cdot \log base}\\ \mathbf{elif}\;im \le -3.342038672369277 \cdot 10^{-80}:\\ \;\;\;\;\frac{\frac{1}{2}}{\frac{\log base}{\log \left(re \cdot re + im \cdot im\right)}}\\ \mathbf{elif}\;im \le 2.373529375665528 \cdot 10^{-90}:\\ \;\;\;\;\frac{\log \left(-re\right)}{\log base}\\ \mathbf{elif}\;im \le 1.3521426037961752 \cdot 10^{+99}:\\ \;\;\;\;\frac{\frac{1}{2}}{\frac{\log base}{\log \left(re \cdot re + im \cdot im\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log im}{\log base}\\ \end{array}\]
\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}
\begin{array}{l}
\mathbf{if}\;im \le -1.3319832853049099 \cdot 10^{+154}:\\
\;\;\;\;\frac{\log base \cdot \log \left(-re\right)}{\log base \cdot \log base}\\

\mathbf{elif}\;im \le -3.342038672369277 \cdot 10^{-80}:\\
\;\;\;\;\frac{\frac{1}{2}}{\frac{\log base}{\log \left(re \cdot re + im \cdot im\right)}}\\

\mathbf{elif}\;im \le 2.373529375665528 \cdot 10^{-90}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\

\mathbf{elif}\;im \le 1.3521426037961752 \cdot 10^{+99}:\\
\;\;\;\;\frac{\frac{1}{2}}{\frac{\log base}{\log \left(re \cdot re + im \cdot im\right)}}\\

\mathbf{else}:\\
\;\;\;\;\frac{\log im}{\log base}\\

\end{array}
double f(double re, double im, double base) {
        double r1912596 = re;
        double r1912597 = r1912596 * r1912596;
        double r1912598 = im;
        double r1912599 = r1912598 * r1912598;
        double r1912600 = r1912597 + r1912599;
        double r1912601 = sqrt(r1912600);
        double r1912602 = log(r1912601);
        double r1912603 = base;
        double r1912604 = log(r1912603);
        double r1912605 = r1912602 * r1912604;
        double r1912606 = atan2(r1912598, r1912596);
        double r1912607 = 0.0;
        double r1912608 = r1912606 * r1912607;
        double r1912609 = r1912605 + r1912608;
        double r1912610 = r1912604 * r1912604;
        double r1912611 = r1912607 * r1912607;
        double r1912612 = r1912610 + r1912611;
        double r1912613 = r1912609 / r1912612;
        return r1912613;
}

double f(double re, double im, double base) {
        double r1912614 = im;
        double r1912615 = -1.3319832853049099e+154;
        bool r1912616 = r1912614 <= r1912615;
        double r1912617 = base;
        double r1912618 = log(r1912617);
        double r1912619 = re;
        double r1912620 = -r1912619;
        double r1912621 = log(r1912620);
        double r1912622 = r1912618 * r1912621;
        double r1912623 = r1912618 * r1912618;
        double r1912624 = r1912622 / r1912623;
        double r1912625 = -3.342038672369277e-80;
        bool r1912626 = r1912614 <= r1912625;
        double r1912627 = 0.5;
        double r1912628 = r1912619 * r1912619;
        double r1912629 = r1912614 * r1912614;
        double r1912630 = r1912628 + r1912629;
        double r1912631 = log(r1912630);
        double r1912632 = r1912618 / r1912631;
        double r1912633 = r1912627 / r1912632;
        double r1912634 = 2.373529375665528e-90;
        bool r1912635 = r1912614 <= r1912634;
        double r1912636 = r1912621 / r1912618;
        double r1912637 = 1.3521426037961752e+99;
        bool r1912638 = r1912614 <= r1912637;
        double r1912639 = log(r1912614);
        double r1912640 = r1912639 / r1912618;
        double r1912641 = r1912638 ? r1912633 : r1912640;
        double r1912642 = r1912635 ? r1912636 : r1912641;
        double r1912643 = r1912626 ? r1912633 : r1912642;
        double r1912644 = r1912616 ? r1912624 : r1912643;
        return r1912644;
}

Error

Bits error versus re

Bits error versus im

Bits error versus base

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 4 regimes
  2. if im < -1.3319832853049099e+154

    1. Initial program 62.0

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified62.0

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Taylor expanded around -inf 51.8

      \[\leadsto \frac{\log \color{blue}{\left(-1 \cdot re\right)} \cdot \log base}{\log base \cdot \log base}\]
    4. Simplified51.8

      \[\leadsto \frac{\log \color{blue}{\left(-re\right)} \cdot \log base}{\log base \cdot \log base}\]

    if -1.3319832853049099e+154 < im < -3.342038672369277e-80 or 2.373529375665528e-90 < im < 1.3521426037961752e+99

    1. Initial program 15.6

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified15.6

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Using strategy rm
    4. Applied times-frac15.5

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log base} \cdot \frac{\log base}{\log base}}\]
    5. Simplified15.5

      \[\leadsto \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log base} \cdot \color{blue}{1}\]
    6. Using strategy rm
    7. Applied pow1/215.5

      \[\leadsto \frac{\log \color{blue}{\left({\left(re \cdot re + im \cdot im\right)}^{\frac{1}{2}}\right)}}{\log base} \cdot 1\]
    8. Applied log-pow15.5

      \[\leadsto \frac{\color{blue}{\frac{1}{2} \cdot \log \left(re \cdot re + im \cdot im\right)}}{\log base} \cdot 1\]
    9. Applied associate-/l*15.5

      \[\leadsto \color{blue}{\frac{\frac{1}{2}}{\frac{\log base}{\log \left(re \cdot re + im \cdot im\right)}}} \cdot 1\]

    if -3.342038672369277e-80 < im < 2.373529375665528e-90

    1. Initial program 25.3

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified25.3

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Using strategy rm
    4. Applied times-frac25.2

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log base} \cdot \frac{\log base}{\log base}}\]
    5. Simplified25.2

      \[\leadsto \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log base} \cdot \color{blue}{1}\]
    6. Taylor expanded around -inf 9.5

      \[\leadsto \frac{\log \color{blue}{\left(-1 \cdot re\right)}}{\log base} \cdot 1\]
    7. Simplified9.5

      \[\leadsto \frac{\log \color{blue}{\left(-re\right)}}{\log base} \cdot 1\]

    if 1.3521426037961752e+99 < im

    1. Initial program 49.6

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified49.6

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Taylor expanded around 0 9.3

      \[\leadsto \color{blue}{\frac{\log im}{\log base}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification16.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -1.3319832853049099 \cdot 10^{+154}:\\ \;\;\;\;\frac{\log base \cdot \log \left(-re\right)}{\log base \cdot \log base}\\ \mathbf{elif}\;im \le -3.342038672369277 \cdot 10^{-80}:\\ \;\;\;\;\frac{\frac{1}{2}}{\frac{\log base}{\log \left(re \cdot re + im \cdot im\right)}}\\ \mathbf{elif}\;im \le 2.373529375665528 \cdot 10^{-90}:\\ \;\;\;\;\frac{\log \left(-re\right)}{\log base}\\ \mathbf{elif}\;im \le 1.3521426037961752 \cdot 10^{+99}:\\ \;\;\;\;\frac{\frac{1}{2}}{\frac{\log base}{\log \left(re \cdot re + im \cdot im\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log im}{\log base}\\ \end{array}\]

Reproduce

herbie shell --seed 2019107 
(FPCore (re im base)
  :name "math.log/2 on complex, real part"
  (/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0)) (+ (* (log base) (log base)) (* 0 0))))