\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 -1.582598474548579396173713851965652835843 \cdot 10^{112}:\\
\;\;\;\;\frac{\frac{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\left(\log base \cdot \left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) + \log base \cdot \log \left(\sqrt[3]{base}\right)\right) + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\
\mathbf{elif}\;re \le -1.097857316006781085020055659405458069718 \cdot 10^{-283}:\\
\;\;\;\;\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\left(\log base \cdot \left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) + \log base \cdot \log \left(\sqrt[3]{base}\right)\right) + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\
\mathbf{elif}\;re \le 5.301603919361751420356837816014607581994 \cdot 10^{-202}:\\
\;\;\;\;\frac{\log im \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 3.028881099794190950594541308531268747948 \cdot 10^{96}:\\
\;\;\;\;\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\left(\log base \cdot \left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) + \log base \cdot \log \left(\sqrt[3]{base}\right)\right) + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}\\
\end{array}double f(double re, double im, double base) {
double r43942 = re;
double r43943 = r43942 * r43942;
double r43944 = im;
double r43945 = r43944 * r43944;
double r43946 = r43943 + r43945;
double r43947 = sqrt(r43946);
double r43948 = log(r43947);
double r43949 = base;
double r43950 = log(r43949);
double r43951 = r43948 * r43950;
double r43952 = atan2(r43944, r43942);
double r43953 = 0.0;
double r43954 = r43952 * r43953;
double r43955 = r43951 + r43954;
double r43956 = r43950 * r43950;
double r43957 = r43953 * r43953;
double r43958 = r43956 + r43957;
double r43959 = r43955 / r43958;
return r43959;
}
double f(double re, double im, double base) {
double r43960 = re;
double r43961 = -1.5825984745485794e+112;
bool r43962 = r43960 <= r43961;
double r43963 = -1.0;
double r43964 = r43963 * r43960;
double r43965 = log(r43964);
double r43966 = base;
double r43967 = log(r43966);
double r43968 = r43965 * r43967;
double r43969 = im;
double r43970 = atan2(r43969, r43960);
double r43971 = 0.0;
double r43972 = r43970 * r43971;
double r43973 = r43968 + r43972;
double r43974 = 2.0;
double r43975 = cbrt(r43966);
double r43976 = log(r43975);
double r43977 = r43974 * r43976;
double r43978 = r43967 * r43977;
double r43979 = r43967 * r43976;
double r43980 = r43978 + r43979;
double r43981 = r43971 * r43971;
double r43982 = r43980 + r43981;
double r43983 = sqrt(r43982);
double r43984 = r43973 / r43983;
double r43985 = r43967 * r43967;
double r43986 = r43985 + r43981;
double r43987 = sqrt(r43986);
double r43988 = r43984 / r43987;
double r43989 = -1.097857316006781e-283;
bool r43990 = r43960 <= r43989;
double r43991 = r43960 * r43960;
double r43992 = r43969 * r43969;
double r43993 = r43991 + r43992;
double r43994 = sqrt(r43993);
double r43995 = log(r43994);
double r43996 = r43995 * r43967;
double r43997 = r43996 + r43972;
double r43998 = r43997 / r43983;
double r43999 = r43998 / r43987;
double r44000 = 5.301603919361751e-202;
bool r44001 = r43960 <= r44000;
double r44002 = log(r43969);
double r44003 = r44002 * r43967;
double r44004 = r44003 + r43972;
double r44005 = r44004 / r43986;
double r44006 = 3.028881099794191e+96;
bool r44007 = r43960 <= r44006;
double r44008 = 1.0;
double r44009 = r44008 / r43960;
double r44010 = log(r44009);
double r44011 = r44008 / r43966;
double r44012 = log(r44011);
double r44013 = r44010 / r44012;
double r44014 = r44007 ? r43999 : r44013;
double r44015 = r44001 ? r44005 : r44014;
double r44016 = r43990 ? r43999 : r44015;
double r44017 = r43962 ? r43988 : r44016;
return r44017;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -1.5825984745485794e+112Initial program 53.4
rmApplied add-sqr-sqrt53.4
Applied associate-/r*53.4
rmApplied add-cube-cbrt53.4
Applied log-prod53.4
Applied distribute-lft-in53.4
Simplified53.4
Taylor expanded around -inf 8.8
if -1.5825984745485794e+112 < re < -1.097857316006781e-283 or 5.301603919361751e-202 < re < 3.028881099794191e+96Initial program 19.7
rmApplied add-sqr-sqrt19.7
Applied associate-/r*19.6
rmApplied add-cube-cbrt19.6
Applied log-prod19.7
Applied distribute-lft-in19.6
Simplified19.6
if -1.097857316006781e-283 < re < 5.301603919361751e-202Initial program 31.7
Taylor expanded around 0 32.2
if 3.028881099794191e+96 < re Initial program 51.3
Taylor expanded around inf 9.6
Final simplification17.6
herbie shell --seed 2019362
(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))))