\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 r44092 = re;
double r44093 = r44092 * r44092;
double r44094 = im;
double r44095 = r44094 * r44094;
double r44096 = r44093 + r44095;
double r44097 = sqrt(r44096);
double r44098 = log(r44097);
double r44099 = base;
double r44100 = log(r44099);
double r44101 = r44098 * r44100;
double r44102 = atan2(r44094, r44092);
double r44103 = 0.0;
double r44104 = r44102 * r44103;
double r44105 = r44101 + r44104;
double r44106 = r44100 * r44100;
double r44107 = r44103 * r44103;
double r44108 = r44106 + r44107;
double r44109 = r44105 / r44108;
return r44109;
}
double f(double re, double im, double base) {
double r44110 = re;
double r44111 = -7.144500791031524e+147;
bool r44112 = r44110 <= r44111;
double r44113 = -1.0;
double r44114 = r44113 * r44110;
double r44115 = log(r44114);
double r44116 = base;
double r44117 = log(r44116);
double r44118 = r44115 * r44117;
double r44119 = im;
double r44120 = atan2(r44119, r44110);
double r44121 = 0.0;
double r44122 = r44120 * r44121;
double r44123 = r44118 + r44122;
double r44124 = r44117 * r44117;
double r44125 = r44121 * r44121;
double r44126 = r44124 + r44125;
double r44127 = r44123 / r44126;
double r44128 = -4.364140895511951e-180;
bool r44129 = r44110 <= r44128;
double r44130 = r44110 * r44110;
double r44131 = r44119 * r44119;
double r44132 = r44130 + r44131;
double r44133 = sqrt(r44132);
double r44134 = log(r44133);
double r44135 = r44134 * r44117;
double r44136 = r44135 + r44122;
double r44137 = sqrt(r44126);
double r44138 = r44136 / r44137;
double r44139 = r44138 / r44137;
double r44140 = 1.7504457734233236e-212;
bool r44141 = r44110 <= r44140;
double r44142 = log(r44119);
double r44143 = r44142 / r44117;
double r44144 = 8.920902837436811e+18;
bool r44145 = r44110 <= r44144;
double r44146 = log(r44110);
double r44147 = r44146 * r44117;
double r44148 = r44147 + r44122;
double r44149 = r44148 / r44137;
double r44150 = r44149 / r44137;
double r44151 = r44145 ? r44139 : r44150;
double r44152 = r44141 ? r44143 : r44151;
double r44153 = r44129 ? r44139 : r44152;
double r44154 = r44112 ? r44127 : r44153;
return r44154;
}



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