\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.860564632808157146272715482474331974986 \cdot 10^{70}:\\
\;\;\;\;\frac{\frac{-1}{3} \cdot \log \left(\frac{-1}{re}\right)}{\log \left(\sqrt[3]{-base} \cdot \sqrt[3]{-1}\right)}\\
\mathbf{elif}\;re \le -2.550928749919678760355455544426569849248 \cdot 10^{-162}:\\
\;\;\;\;\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\right)}^{2} + 0.0 \cdot 0.0}} \cdot \frac{1}{\sqrt{0.0 \cdot 0.0 + {\left(\log base\right)}^{2}}}\\
\mathbf{elif}\;re \le 4.352011132147789479254882523295138287074 \cdot 10^{-295}:\\
\;\;\;\;\frac{\log im \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\left(\left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) \cdot \log base + \log \left(\sqrt[3]{base}\right) \cdot \log base\right) + 0.0 \cdot 0.0}\\
\mathbf{elif}\;re \le 5.983180677799418047864441563914340286047 \cdot 10^{93}:\\
\;\;\;\;\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\right)}^{2} + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-\log re}{-\log base}\\
\end{array}double f(double re, double im, double base) {
double r100781 = re;
double r100782 = r100781 * r100781;
double r100783 = im;
double r100784 = r100783 * r100783;
double r100785 = r100782 + r100784;
double r100786 = sqrt(r100785);
double r100787 = log(r100786);
double r100788 = base;
double r100789 = log(r100788);
double r100790 = r100787 * r100789;
double r100791 = atan2(r100783, r100781);
double r100792 = 0.0;
double r100793 = r100791 * r100792;
double r100794 = r100790 + r100793;
double r100795 = r100789 * r100789;
double r100796 = r100792 * r100792;
double r100797 = r100795 + r100796;
double r100798 = r100794 / r100797;
return r100798;
}
double f(double re, double im, double base) {
double r100799 = re;
double r100800 = -1.860564632808157e+70;
bool r100801 = r100799 <= r100800;
double r100802 = -0.3333333333333333;
double r100803 = -1.0;
double r100804 = r100803 / r100799;
double r100805 = log(r100804);
double r100806 = r100802 * r100805;
double r100807 = base;
double r100808 = -r100807;
double r100809 = cbrt(r100808);
double r100810 = cbrt(r100803);
double r100811 = r100809 * r100810;
double r100812 = log(r100811);
double r100813 = r100806 / r100812;
double r100814 = -2.550928749919679e-162;
bool r100815 = r100799 <= r100814;
double r100816 = r100799 * r100799;
double r100817 = im;
double r100818 = r100817 * r100817;
double r100819 = r100816 + r100818;
double r100820 = sqrt(r100819);
double r100821 = log(r100820);
double r100822 = log(r100807);
double r100823 = r100821 * r100822;
double r100824 = atan2(r100817, r100799);
double r100825 = 0.0;
double r100826 = r100824 * r100825;
double r100827 = r100823 + r100826;
double r100828 = 2.0;
double r100829 = pow(r100822, r100828);
double r100830 = r100825 * r100825;
double r100831 = r100829 + r100830;
double r100832 = sqrt(r100831);
double r100833 = r100827 / r100832;
double r100834 = 1.0;
double r100835 = r100830 + r100829;
double r100836 = sqrt(r100835);
double r100837 = r100834 / r100836;
double r100838 = r100833 * r100837;
double r100839 = 4.3520111321477895e-295;
bool r100840 = r100799 <= r100839;
double r100841 = log(r100817);
double r100842 = r100841 * r100822;
double r100843 = r100842 + r100826;
double r100844 = cbrt(r100807);
double r100845 = log(r100844);
double r100846 = r100828 * r100845;
double r100847 = r100846 * r100822;
double r100848 = r100845 * r100822;
double r100849 = r100847 + r100848;
double r100850 = r100849 + r100830;
double r100851 = r100843 / r100850;
double r100852 = 5.983180677799418e+93;
bool r100853 = r100799 <= r100852;
double r100854 = r100822 * r100822;
double r100855 = r100854 + r100830;
double r100856 = sqrt(r100855);
double r100857 = r100833 / r100856;
double r100858 = log(r100799);
double r100859 = -r100858;
double r100860 = -r100822;
double r100861 = r100859 / r100860;
double r100862 = r100853 ? r100857 : r100861;
double r100863 = r100840 ? r100851 : r100862;
double r100864 = r100815 ? r100838 : r100863;
double r100865 = r100801 ? r100813 : r100864;
return r100865;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -1.860564632808157e+70Initial program 46.7
rmApplied add-cube-cbrt46.7
Applied log-prod46.7
Applied distribute-lft-in46.7
Simplified46.7
Simplified46.7
Taylor expanded around -inf 64.0
Simplified10.2
if -1.860564632808157e+70 < re < -2.550928749919679e-162Initial program 15.6
rmApplied add-sqr-sqrt15.6
Applied associate-/r*15.5
Simplified15.5
rmApplied div-inv15.6
Simplified15.6
if -2.550928749919679e-162 < re < 4.3520111321477895e-295Initial program 32.3
rmApplied add-cube-cbrt32.3
Applied log-prod32.3
Applied distribute-lft-in32.3
Simplified32.3
Simplified32.3
Taylor expanded around 0 34.9
if 4.3520111321477895e-295 < re < 5.983180677799418e+93Initial program 21.5
rmApplied add-sqr-sqrt21.5
Applied associate-/r*21.5
Simplified21.5
if 5.983180677799418e+93 < re Initial program 50.4
Taylor expanded around inf 8.2
Simplified8.2
Final simplification17.6
herbie shell --seed 2019304
(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))))