\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\begin{array}{l}
\mathbf{if}\;re \le -1.980152666258109 \cdot 10^{+119}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\
\mathbf{elif}\;re \le -1.3122611677520722 \cdot 10^{-206}:\\
\;\;\;\;\frac{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}{\log base}\\
\mathbf{elif}\;re \le -1.0494477405550627 \cdot 10^{-235}:\\
\;\;\;\;\log \left(\frac{-1}{re}\right) \cdot \frac{-1}{\log base}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}{\log base}\\
\end{array}double f(double re, double im, double base) {
double r1936578 = re;
double r1936579 = r1936578 * r1936578;
double r1936580 = im;
double r1936581 = r1936580 * r1936580;
double r1936582 = r1936579 + r1936581;
double r1936583 = sqrt(r1936582);
double r1936584 = log(r1936583);
double r1936585 = base;
double r1936586 = log(r1936585);
double r1936587 = r1936584 * r1936586;
double r1936588 = atan2(r1936580, r1936578);
double r1936589 = 0.0;
double r1936590 = r1936588 * r1936589;
double r1936591 = r1936587 + r1936590;
double r1936592 = r1936586 * r1936586;
double r1936593 = r1936589 * r1936589;
double r1936594 = r1936592 + r1936593;
double r1936595 = r1936591 / r1936594;
return r1936595;
}
double f(double re, double im, double base) {
double r1936596 = re;
double r1936597 = -1.980152666258109e+119;
bool r1936598 = r1936596 <= r1936597;
double r1936599 = -r1936596;
double r1936600 = log(r1936599);
double r1936601 = base;
double r1936602 = log(r1936601);
double r1936603 = r1936600 / r1936602;
double r1936604 = -1.3122611677520722e-206;
bool r1936605 = r1936596 <= r1936604;
double r1936606 = im;
double r1936607 = r1936606 * r1936606;
double r1936608 = r1936596 * r1936596;
double r1936609 = r1936607 + r1936608;
double r1936610 = sqrt(r1936609);
double r1936611 = log(r1936610);
double r1936612 = r1936611 / r1936602;
double r1936613 = -1.0494477405550627e-235;
bool r1936614 = r1936596 <= r1936613;
double r1936615 = -1.0;
double r1936616 = r1936615 / r1936596;
double r1936617 = log(r1936616);
double r1936618 = r1936615 / r1936602;
double r1936619 = r1936617 * r1936618;
double r1936620 = r1936614 ? r1936619 : r1936612;
double r1936621 = r1936605 ? r1936612 : r1936620;
double r1936622 = r1936598 ? r1936603 : r1936621;
return r1936622;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -1.980152666258109e+119Initial program 53.1
Simplified53.1
Taylor expanded around -inf 8.1
Simplified8.1
rmApplied associate-/l*8.0
Simplified8.0
if -1.980152666258109e+119 < re < -1.3122611677520722e-206 or -1.0494477405550627e-235 < re Initial program 20.3
Simplified20.3
rmApplied associate-/r*20.2
Simplified20.2
if -1.3122611677520722e-206 < re < -1.0494477405550627e-235Initial program 32.2
Simplified32.2
Taylor expanded around -inf 62.8
Simplified49.3
rmApplied div-inv49.3
Simplified49.3
Final simplification17.8
herbie shell --seed 2019139
(FPCore (re im base)
:name "math.log/2 on complex, real part"
(/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0)) (+ (* (log base) (log base)) (* 0 0))))