\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;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -2.9652520035737835e+142Initial program 61.2
Taylor expanded around -inf 6.6
if -2.9652520035737835e+142 < re < 1.770333565863176e+91Initial program 21.7
rmApplied div-inv21.7
if 1.770333565863176e+91 < re Initial program 51.0
rmApplied div-inv51.0
rmApplied add-sqr-sqrt51.0
Applied *-un-lft-identity51.0
Applied times-frac51.0
Applied associate-*r*51.0
Simplified51.0
Taylor expanded around inf 9.4
Final simplification17.6
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))))