Average Error: 32.3 → 18.0
Time: 9.6s
Precision: 64
\[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
\[\begin{array}{l} \mathbf{if}\;re \le -4.3087254010389655 \cdot 10^{114}:\\ \;\;\;\;\frac{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\\ \mathbf{elif}\;re \le 1.72107814649001555 \cdot 10^{92}:\\ \;\;\;\;\frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}\\ \end{array}\]
\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}
\begin{array}{l}
\mathbf{if}\;re \le -4.3087254010389655 \cdot 10^{114}:\\
\;\;\;\;\frac{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\\

\mathbf{elif}\;re \le 1.72107814649001555 \cdot 10^{92}:\\
\;\;\;\;\frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\

\mathbf{else}:\\
\;\;\;\;\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}\\

\end{array}
double f(double re, double im, double base) {
        double r46913 = re;
        double r46914 = r46913 * r46913;
        double r46915 = im;
        double r46916 = r46915 * r46915;
        double r46917 = r46914 + r46916;
        double r46918 = sqrt(r46917);
        double r46919 = log(r46918);
        double r46920 = base;
        double r46921 = log(r46920);
        double r46922 = r46919 * r46921;
        double r46923 = atan2(r46915, r46913);
        double r46924 = 0.0;
        double r46925 = r46923 * r46924;
        double r46926 = r46922 + r46925;
        double r46927 = r46921 * r46921;
        double r46928 = r46924 * r46924;
        double r46929 = r46927 + r46928;
        double r46930 = r46926 / r46929;
        return r46930;
}

double f(double re, double im, double base) {
        double r46931 = re;
        double r46932 = -4.3087254010389655e+114;
        bool r46933 = r46931 <= r46932;
        double r46934 = -1.0;
        double r46935 = r46934 * r46931;
        double r46936 = log(r46935);
        double r46937 = base;
        double r46938 = log(r46937);
        double r46939 = r46936 * r46938;
        double r46940 = im;
        double r46941 = atan2(r46940, r46931);
        double r46942 = 0.0;
        double r46943 = r46941 * r46942;
        double r46944 = r46939 + r46943;
        double r46945 = r46938 * r46938;
        double r46946 = r46942 * r46942;
        double r46947 = r46945 + r46946;
        double r46948 = r46944 / r46947;
        double r46949 = 1.7210781464900156e+92;
        bool r46950 = r46931 <= r46949;
        double r46951 = 1.0;
        double r46952 = sqrt(r46947);
        double r46953 = r46951 / r46952;
        double r46954 = r46931 * r46931;
        double r46955 = r46940 * r46940;
        double r46956 = r46954 + r46955;
        double r46957 = sqrt(r46956);
        double r46958 = log(r46957);
        double r46959 = r46958 * r46938;
        double r46960 = r46959 + r46943;
        double r46961 = r46960 / r46952;
        double r46962 = r46953 * r46961;
        double r46963 = r46951 / r46931;
        double r46964 = log(r46963);
        double r46965 = r46951 / r46937;
        double r46966 = log(r46965);
        double r46967 = r46964 / r46966;
        double r46968 = r46950 ? r46962 : r46967;
        double r46969 = r46933 ? r46948 : r46968;
        return r46969;
}

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 3 regimes
  2. if re < -4.3087254010389655e+114

    1. Initial program 54.7

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
    2. Taylor expanded around -inf 9.1

      \[\leadsto \frac{\log \color{blue}{\left(-1 \cdot re\right)} \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]

    if -4.3087254010389655e+114 < re < 1.7210781464900156e+92

    1. Initial program 22.2

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt22.2

      \[\leadsto \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\color{blue}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0} \cdot \sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}\]
    4. Applied *-un-lft-identity22.2

      \[\leadsto \frac{\color{blue}{1 \cdot \left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0} \cdot \sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\]
    5. Applied times-frac22.2

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

    if 1.7210781464900156e+92 < re

    1. Initial program 49.8

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
    2. Taylor expanded around inf 10.4

      \[\leadsto \color{blue}{\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification18.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -4.3087254010389655 \cdot 10^{114}:\\ \;\;\;\;\frac{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\\ \mathbf{elif}\;re \le 1.72107814649001555 \cdot 10^{92}:\\ \;\;\;\;\frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}\\ \end{array}\]

Reproduce

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