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 r1912591 = re;
        double r1912592 = r1912591 * r1912591;
        double r1912593 = im;
        double r1912594 = r1912593 * r1912593;
        double r1912595 = r1912592 + r1912594;
        double r1912596 = sqrt(r1912595);
        double r1912597 = log(r1912596);
        double r1912598 = base;
        double r1912599 = log(r1912598);
        double r1912600 = r1912597 * r1912599;
        double r1912601 = atan2(r1912593, r1912591);
        double r1912602 = 0.0;
        double r1912603 = r1912601 * r1912602;
        double r1912604 = r1912600 + r1912603;
        double r1912605 = r1912599 * r1912599;
        double r1912606 = r1912602 * r1912602;
        double r1912607 = r1912605 + r1912606;
        double r1912608 = r1912604 / r1912607;
        return r1912608;
}

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

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))))