\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 -0.04427952366159925573496636275194759946316:\\
\;\;\;\;\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.627946421707235249049212774387238708289 \cdot 10^{-181}:\\
\;\;\;\;\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\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}\\
\mathbf{elif}\;re \le -2.244275880316184312571979912380930526646 \cdot 10^{-299}:\\
\;\;\;\;\frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \frac{\log im \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\
\mathbf{elif}\;re \le 149110596151586069466046352433323123408900:\\
\;\;\;\;\frac{1}{\sqrt{\sqrt[3]{{\left(\log base\right)}^{6}} + 0.0 \cdot 0.0}} \cdot \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}}\\
\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 r53003 = re;
double r53004 = r53003 * r53003;
double r53005 = im;
double r53006 = r53005 * r53005;
double r53007 = r53004 + r53006;
double r53008 = sqrt(r53007);
double r53009 = log(r53008);
double r53010 = base;
double r53011 = log(r53010);
double r53012 = r53009 * r53011;
double r53013 = atan2(r53005, r53003);
double r53014 = 0.0;
double r53015 = r53013 * r53014;
double r53016 = r53012 + r53015;
double r53017 = r53011 * r53011;
double r53018 = r53014 * r53014;
double r53019 = r53017 + r53018;
double r53020 = r53016 / r53019;
return r53020;
}
double f(double re, double im, double base) {
double r53021 = re;
double r53022 = -0.044279523661599256;
bool r53023 = r53021 <= r53022;
double r53024 = -1.0;
double r53025 = r53024 * r53021;
double r53026 = log(r53025);
double r53027 = base;
double r53028 = log(r53027);
double r53029 = r53026 * r53028;
double r53030 = im;
double r53031 = atan2(r53030, r53021);
double r53032 = 0.0;
double r53033 = r53031 * r53032;
double r53034 = r53029 + r53033;
double r53035 = r53028 * r53028;
double r53036 = r53032 * r53032;
double r53037 = r53035 + r53036;
double r53038 = r53034 / r53037;
double r53039 = -4.627946421707235e-181;
bool r53040 = r53021 <= r53039;
double r53041 = r53021 * r53021;
double r53042 = r53030 * r53030;
double r53043 = r53041 + r53042;
double r53044 = sqrt(r53043);
double r53045 = log(r53044);
double r53046 = r53045 * r53028;
double r53047 = r53046 + r53033;
double r53048 = 2.0;
double r53049 = cbrt(r53027);
double r53050 = log(r53049);
double r53051 = r53048 * r53050;
double r53052 = r53028 * r53051;
double r53053 = r53028 * r53050;
double r53054 = r53052 + r53053;
double r53055 = r53054 + r53036;
double r53056 = r53047 / r53055;
double r53057 = -2.2442758803161843e-299;
bool r53058 = r53021 <= r53057;
double r53059 = 1.0;
double r53060 = sqrt(r53037);
double r53061 = r53059 / r53060;
double r53062 = log(r53030);
double r53063 = r53062 * r53028;
double r53064 = r53063 + r53033;
double r53065 = r53064 / r53060;
double r53066 = r53061 * r53065;
double r53067 = 1.4911059615158607e+41;
bool r53068 = r53021 <= r53067;
double r53069 = 6.0;
double r53070 = pow(r53028, r53069);
double r53071 = cbrt(r53070);
double r53072 = r53071 + r53036;
double r53073 = sqrt(r53072);
double r53074 = r53059 / r53073;
double r53075 = r53047 / r53060;
double r53076 = r53074 * r53075;
double r53077 = r53059 / r53021;
double r53078 = log(r53077);
double r53079 = r53059 / r53027;
double r53080 = log(r53079);
double r53081 = r53078 / r53080;
double r53082 = r53068 ? r53076 : r53081;
double r53083 = r53058 ? r53066 : r53082;
double r53084 = r53040 ? r53056 : r53083;
double r53085 = r53023 ? r53038 : r53084;
return r53085;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -0.044279523661599256Initial program 41.2
Taylor expanded around -inf 13.5
if -0.044279523661599256 < re < -4.627946421707235e-181Initial program 19.1
rmApplied add-cube-cbrt19.1
Applied log-prod19.2
Applied distribute-lft-in19.1
Simplified19.1
if -4.627946421707235e-181 < re < -2.2442758803161843e-299Initial program 30.3
rmApplied add-sqr-sqrt30.3
Applied *-un-lft-identity30.3
Applied times-frac30.3
Taylor expanded around 0 35.3
if -2.2442758803161843e-299 < re < 1.4911059615158607e+41Initial program 23.1
rmApplied add-sqr-sqrt23.1
Applied *-un-lft-identity23.1
Applied times-frac23.1
rmApplied add-cbrt-cube23.2
Applied add-cbrt-cube23.2
Applied cbrt-unprod23.2
Simplified23.1
if 1.4911059615158607e+41 < re Initial program 44.4
Taylor expanded around inf 11.6
Final simplification18.8
herbie shell --seed 2019318
(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))))