\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}\;im \le -3.723507598105854 \cdot 10^{+150}:\\
\;\;\;\;\frac{\log \left(-re\right) \cdot \log base}{\log base \cdot \log base}\\
\mathbf{elif}\;im \le -2.973946629754585 \cdot 10^{-88}:\\
\;\;\;\;\frac{\log \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right)}{\log base}\\
\mathbf{elif}\;im \le 3.3440052807984994 \cdot 10^{-56}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log im}{\log base}\\
\end{array}double f(double re, double im, double base) {
double r1467501 = re;
double r1467502 = r1467501 * r1467501;
double r1467503 = im;
double r1467504 = r1467503 * r1467503;
double r1467505 = r1467502 + r1467504;
double r1467506 = sqrt(r1467505);
double r1467507 = log(r1467506);
double r1467508 = base;
double r1467509 = log(r1467508);
double r1467510 = r1467507 * r1467509;
double r1467511 = atan2(r1467503, r1467501);
double r1467512 = 0.0;
double r1467513 = r1467511 * r1467512;
double r1467514 = r1467510 + r1467513;
double r1467515 = r1467509 * r1467509;
double r1467516 = r1467512 * r1467512;
double r1467517 = r1467515 + r1467516;
double r1467518 = r1467514 / r1467517;
return r1467518;
}
double f(double re, double im, double base) {
double r1467519 = im;
double r1467520 = -3.723507598105854e+150;
bool r1467521 = r1467519 <= r1467520;
double r1467522 = re;
double r1467523 = -r1467522;
double r1467524 = log(r1467523);
double r1467525 = base;
double r1467526 = log(r1467525);
double r1467527 = r1467524 * r1467526;
double r1467528 = r1467526 * r1467526;
double r1467529 = r1467527 / r1467528;
double r1467530 = -2.973946629754585e-88;
bool r1467531 = r1467519 <= r1467530;
double r1467532 = r1467522 * r1467522;
double r1467533 = r1467519 * r1467519;
double r1467534 = r1467532 + r1467533;
double r1467535 = sqrt(r1467534);
double r1467536 = sqrt(r1467535);
double r1467537 = r1467536 * r1467536;
double r1467538 = log(r1467537);
double r1467539 = r1467538 / r1467526;
double r1467540 = 3.3440052807984994e-56;
bool r1467541 = r1467519 <= r1467540;
double r1467542 = r1467524 / r1467526;
double r1467543 = log(r1467519);
double r1467544 = r1467543 / r1467526;
double r1467545 = r1467541 ? r1467542 : r1467544;
double r1467546 = r1467531 ? r1467539 : r1467545;
double r1467547 = r1467521 ? r1467529 : r1467546;
return r1467547;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if im < -3.723507598105854e+150Initial program 60.9
Simplified60.9
Taylor expanded around -inf 51.6
Simplified51.6
if -3.723507598105854e+150 < im < -2.973946629754585e-88Initial program 16.5
Simplified16.5
rmApplied associate-/r*16.4
Simplified16.4
rmApplied add-sqr-sqrt16.4
Applied sqrt-prod16.4
if -2.973946629754585e-88 < im < 3.3440052807984994e-56Initial program 25.7
Simplified25.7
rmApplied associate-/r*25.6
Simplified25.6
Taylor expanded around -inf 11.2
Simplified11.2
if 3.3440052807984994e-56 < im Initial program 34.9
Simplified34.9
rmApplied associate-/r*34.9
Simplified34.9
Taylor expanded around 0 16.3
Final simplification18.8
herbie shell --seed 2019137
(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))))