\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.477980765554152890668180029680723006559 \cdot 10^{121}:\\
\;\;\;\;\frac{-\log \left(\frac{-1}{re}\right)}{\log base}\\
\mathbf{elif}\;re \le 5.925540416458275309943000169806911367311 \cdot 10^{52}:\\
\;\;\;\;\frac{1}{\sqrt{{\left(\log base\right)}^{2} + 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{\sqrt[3]{{\left(\log base\right)}^{6}} + 0.0 \cdot 0.0}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-\log re}{-\log base}\\
\end{array}double f(double re, double im, double base) {
double r94426 = re;
double r94427 = r94426 * r94426;
double r94428 = im;
double r94429 = r94428 * r94428;
double r94430 = r94427 + r94429;
double r94431 = sqrt(r94430);
double r94432 = log(r94431);
double r94433 = base;
double r94434 = log(r94433);
double r94435 = r94432 * r94434;
double r94436 = atan2(r94428, r94426);
double r94437 = 0.0;
double r94438 = r94436 * r94437;
double r94439 = r94435 + r94438;
double r94440 = r94434 * r94434;
double r94441 = r94437 * r94437;
double r94442 = r94440 + r94441;
double r94443 = r94439 / r94442;
return r94443;
}
double f(double re, double im, double base) {
double r94444 = re;
double r94445 = -1.477980765554153e+121;
bool r94446 = r94444 <= r94445;
double r94447 = -1.0;
double r94448 = r94447 / r94444;
double r94449 = log(r94448);
double r94450 = -r94449;
double r94451 = base;
double r94452 = log(r94451);
double r94453 = r94450 / r94452;
double r94454 = 5.925540416458275e+52;
bool r94455 = r94444 <= r94454;
double r94456 = 1.0;
double r94457 = 2.0;
double r94458 = pow(r94452, r94457);
double r94459 = 0.0;
double r94460 = r94459 * r94459;
double r94461 = r94458 + r94460;
double r94462 = sqrt(r94461);
double r94463 = r94456 / r94462;
double r94464 = r94444 * r94444;
double r94465 = im;
double r94466 = r94465 * r94465;
double r94467 = r94464 + r94466;
double r94468 = sqrt(r94467);
double r94469 = log(r94468);
double r94470 = r94469 * r94452;
double r94471 = atan2(r94465, r94444);
double r94472 = r94471 * r94459;
double r94473 = r94470 + r94472;
double r94474 = 6.0;
double r94475 = pow(r94452, r94474);
double r94476 = cbrt(r94475);
double r94477 = r94476 + r94460;
double r94478 = sqrt(r94477);
double r94479 = r94473 / r94478;
double r94480 = r94463 * r94479;
double r94481 = log(r94444);
double r94482 = -r94481;
double r94483 = -r94452;
double r94484 = r94482 / r94483;
double r94485 = r94455 ? r94480 : r94484;
double r94486 = r94446 ? r94453 : r94485;
return r94486;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -1.477980765554153e+121Initial program 55.4
rmApplied add-sqr-sqrt55.4
Applied *-un-lft-identity55.4
Applied times-frac55.4
Simplified55.4
Simplified55.4
Taylor expanded around -inf 64.0
Simplified7.9
if -1.477980765554153e+121 < re < 5.925540416458275e+52Initial program 21.9
rmApplied add-sqr-sqrt21.9
Applied *-un-lft-identity21.9
Applied times-frac21.9
Simplified21.9
Simplified21.9
rmApplied add-cbrt-cube22.0
Simplified21.9
if 5.925540416458275e+52 < re Initial program 45.0
Taylor expanded around inf 11.3
Simplified11.3
Final simplification17.7
herbie shell --seed 2019325
(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))))