Average Error: 31.9 → 17.6
Time: 7.9s
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 -2.965252003573783474497671902281515605196 \cdot 10^{142}:\\ \;\;\;\;\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.770333565863176087531002092878310593136 \cdot 10^{91}:\\ \;\;\;\;\left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \frac{1}{\log base \cdot \log base + 0.0 \cdot 0.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log re \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \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 -2.965252003573783474497671902281515605196 \cdot 10^{142}:\\
\;\;\;\;\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.770333565863176087531002092878310593136 \cdot 10^{91}:\\
\;\;\;\;\left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \frac{1}{\log base \cdot \log base + 0.0 \cdot 0.0}\\

\mathbf{else}:\\
\;\;\;\;\frac{\log re \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\

\end{array}
double f(double re, double im, double base) {
        double r41921 = re;
        double r41922 = r41921 * r41921;
        double r41923 = im;
        double r41924 = r41923 * r41923;
        double r41925 = r41922 + r41924;
        double r41926 = sqrt(r41925);
        double r41927 = log(r41926);
        double r41928 = base;
        double r41929 = log(r41928);
        double r41930 = r41927 * r41929;
        double r41931 = atan2(r41923, r41921);
        double r41932 = 0.0;
        double r41933 = r41931 * r41932;
        double r41934 = r41930 + r41933;
        double r41935 = r41929 * r41929;
        double r41936 = r41932 * r41932;
        double r41937 = r41935 + r41936;
        double r41938 = r41934 / r41937;
        return r41938;
}

double f(double re, double im, double base) {
        double r41939 = re;
        double r41940 = -2.9652520035737835e+142;
        bool r41941 = r41939 <= r41940;
        double r41942 = -1.0;
        double r41943 = r41942 * r41939;
        double r41944 = log(r41943);
        double r41945 = base;
        double r41946 = log(r41945);
        double r41947 = r41944 * r41946;
        double r41948 = im;
        double r41949 = atan2(r41948, r41939);
        double r41950 = 0.0;
        double r41951 = r41949 * r41950;
        double r41952 = r41947 + r41951;
        double r41953 = r41946 * r41946;
        double r41954 = r41950 * r41950;
        double r41955 = r41953 + r41954;
        double r41956 = r41952 / r41955;
        double r41957 = 1.770333565863176e+91;
        bool r41958 = r41939 <= r41957;
        double r41959 = r41939 * r41939;
        double r41960 = r41948 * r41948;
        double r41961 = r41959 + r41960;
        double r41962 = sqrt(r41961);
        double r41963 = log(r41962);
        double r41964 = r41963 * r41946;
        double r41965 = r41964 + r41951;
        double r41966 = 1.0;
        double r41967 = r41966 / r41955;
        double r41968 = r41965 * r41967;
        double r41969 = log(r41939);
        double r41970 = r41969 * r41946;
        double r41971 = r41970 + r41951;
        double r41972 = sqrt(r41955);
        double r41973 = r41971 / r41972;
        double r41974 = r41966 / r41972;
        double r41975 = r41973 * r41974;
        double r41976 = r41958 ? r41968 : r41975;
        double r41977 = r41941 ? r41956 : r41976;
        return r41977;
}

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 < -2.9652520035737835e+142

    1. Initial program 61.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. Taylor expanded around -inf 6.6

      \[\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 -2.9652520035737835e+142 < re < 1.770333565863176e+91

    1. Initial program 21.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. Using strategy rm
    3. Applied div-inv21.7

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

    if 1.770333565863176e+91 < re

    1. Initial program 51.0

      \[\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 div-inv51.0

      \[\leadsto \color{blue}{\left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \frac{1}{\log base \cdot \log base + 0.0 \cdot 0.0}}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt51.0

      \[\leadsto \left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \frac{1}{\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}}}\]
    6. Applied *-un-lft-identity51.0

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

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

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

      \[\leadsto \color{blue}{\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}}} \cdot \frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\]
    10. Taylor expanded around inf 9.4

      \[\leadsto \frac{\log \color{blue}{re} \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification17.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.965252003573783474497671902281515605196 \cdot 10^{142}:\\ \;\;\;\;\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.770333565863176087531002092878310593136 \cdot 10^{91}:\\ \;\;\;\;\left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \frac{1}{\log base \cdot \log base + 0.0 \cdot 0.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log re \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \end{array}\]

Reproduce

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