\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 r43045 = re;
double r43046 = r43045 * r43045;
double r43047 = im;
double r43048 = r43047 * r43047;
double r43049 = r43046 + r43048;
double r43050 = sqrt(r43049);
double r43051 = log(r43050);
double r43052 = base;
double r43053 = log(r43052);
double r43054 = r43051 * r43053;
double r43055 = atan2(r43047, r43045);
double r43056 = 0.0;
double r43057 = r43055 * r43056;
double r43058 = r43054 + r43057;
double r43059 = r43053 * r43053;
double r43060 = r43056 * r43056;
double r43061 = r43059 + r43060;
double r43062 = r43058 / r43061;
return r43062;
}
double f(double re, double im, double base) {
double r43063 = re;
double r43064 = -7.144500791031524e+147;
bool r43065 = r43063 <= r43064;
double r43066 = -1.0;
double r43067 = r43066 * r43063;
double r43068 = log(r43067);
double r43069 = base;
double r43070 = log(r43069);
double r43071 = r43068 * r43070;
double r43072 = im;
double r43073 = atan2(r43072, r43063);
double r43074 = 0.0;
double r43075 = r43073 * r43074;
double r43076 = r43071 + r43075;
double r43077 = r43070 * r43070;
double r43078 = r43074 * r43074;
double r43079 = r43077 + r43078;
double r43080 = r43076 / r43079;
double r43081 = -4.364140895511951e-180;
bool r43082 = r43063 <= r43081;
double r43083 = r43063 * r43063;
double r43084 = r43072 * r43072;
double r43085 = r43083 + r43084;
double r43086 = sqrt(r43085);
double r43087 = log(r43086);
double r43088 = r43087 * r43070;
double r43089 = r43088 + r43075;
double r43090 = sqrt(r43079);
double r43091 = r43089 / r43090;
double r43092 = r43091 / r43090;
double r43093 = 1.7504457734233236e-212;
bool r43094 = r43063 <= r43093;
double r43095 = log(r43072);
double r43096 = r43095 / r43070;
double r43097 = 8.920902837436811e+18;
bool r43098 = r43063 <= r43097;
double r43099 = log(r43063);
double r43100 = r43099 * r43070;
double r43101 = r43100 + r43075;
double r43102 = r43101 / r43090;
double r43103 = r43102 / r43090;
double r43104 = r43098 ? r43092 : r43103;
double r43105 = r43094 ? r43096 : r43104;
double r43106 = r43082 ? r43092 : r43105;
double r43107 = r43065 ? r43080 : r43106;
return r43107;
}



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