\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 -7.144500791031523614501840815340230406496 \cdot 10^{147}:\\
\;\;\;\;\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 -4.364140895511950642465986845068438631581 \cdot 10^{-180}:\\
\;\;\;\;\frac{\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}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\
\mathbf{elif}\;re \le 1.750445773423323613698564574317628521107 \cdot 10^{-212}:\\
\;\;\;\;\frac{\log im}{\log base}\\
\mathbf{elif}\;re \le 8920902837436811264:\\
\;\;\;\;\frac{\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}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\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}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\
\end{array}double f(double re, double im, double base) {
double r43773 = re;
double r43774 = r43773 * r43773;
double r43775 = im;
double r43776 = r43775 * r43775;
double r43777 = r43774 + r43776;
double r43778 = sqrt(r43777);
double r43779 = log(r43778);
double r43780 = base;
double r43781 = log(r43780);
double r43782 = r43779 * r43781;
double r43783 = atan2(r43775, r43773);
double r43784 = 0.0;
double r43785 = r43783 * r43784;
double r43786 = r43782 + r43785;
double r43787 = r43781 * r43781;
double r43788 = r43784 * r43784;
double r43789 = r43787 + r43788;
double r43790 = r43786 / r43789;
return r43790;
}
double f(double re, double im, double base) {
double r43791 = re;
double r43792 = -7.144500791031524e+147;
bool r43793 = r43791 <= r43792;
double r43794 = -1.0;
double r43795 = r43794 * r43791;
double r43796 = log(r43795);
double r43797 = base;
double r43798 = log(r43797);
double r43799 = r43796 * r43798;
double r43800 = im;
double r43801 = atan2(r43800, r43791);
double r43802 = 0.0;
double r43803 = r43801 * r43802;
double r43804 = r43799 + r43803;
double r43805 = r43798 * r43798;
double r43806 = r43802 * r43802;
double r43807 = r43805 + r43806;
double r43808 = r43804 / r43807;
double r43809 = -4.364140895511951e-180;
bool r43810 = r43791 <= r43809;
double r43811 = r43791 * r43791;
double r43812 = r43800 * r43800;
double r43813 = r43811 + r43812;
double r43814 = sqrt(r43813);
double r43815 = log(r43814);
double r43816 = r43815 * r43798;
double r43817 = r43816 + r43803;
double r43818 = sqrt(r43807);
double r43819 = r43817 / r43818;
double r43820 = r43819 / r43818;
double r43821 = 1.7504457734233236e-212;
bool r43822 = r43791 <= r43821;
double r43823 = log(r43800);
double r43824 = r43823 / r43798;
double r43825 = 8.920902837436811e+18;
bool r43826 = r43791 <= r43825;
double r43827 = log(r43791);
double r43828 = r43827 * r43798;
double r43829 = r43828 + r43803;
double r43830 = r43829 / r43818;
double r43831 = r43830 / r43818;
double r43832 = r43826 ? r43820 : r43831;
double r43833 = r43822 ? r43824 : r43832;
double r43834 = r43810 ? r43820 : r43833;
double r43835 = r43793 ? r43808 : r43834;
return r43835;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -7.144500791031524e+147Initial program 62.6
Taylor expanded around -inf 8.3
if -7.144500791031524e+147 < re < -4.364140895511951e-180 or 1.7504457734233236e-212 < re < 8.920902837436811e+18Initial program 17.5
rmApplied add-sqr-sqrt17.5
Applied associate-/r*17.4
if -4.364140895511951e-180 < re < 1.7504457734233236e-212Initial program 31.5
Taylor expanded around 0 34.1
if 8.920902837436811e+18 < re Initial program 42.3
rmApplied add-sqr-sqrt42.3
Applied associate-/r*42.3
Taylor expanded around inf 12.6
Final simplification18.1
herbie shell --seed 2020001
(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))))