\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 -8.872872797015364335925792872251002149328 \cdot 10^{107}:\\
\;\;\;\;\frac{\tan^{-1}_* \frac{im}{re} \cdot 0.0 + \log \left(\frac{-1}{re}\right) \cdot \left(-\log base\right)}{\log base \cdot \log base + 0.0 \cdot 0.0}\\
\mathbf{elif}\;re \le -1.718328802427038851534936759351323589031 \cdot 10^{-278}:\\
\;\;\;\;\frac{{\left(\tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}^{3} + {\left(\log base \cdot \log \left(\sqrt{re \cdot re + im \cdot im}\right)\right)}^{3}}{\left({\left(\log base\right)}^{2} + 0.0 \cdot 0.0\right) \cdot \left(\left(\log base \cdot \log \left(\sqrt{re \cdot re + im \cdot im}\right)\right) \cdot \left(\log base \cdot \log \left(\sqrt{re \cdot re + im \cdot im}\right) - \tan^{-1}_* \frac{im}{re} \cdot 0.0\right) + \left(0.0 \cdot 0.0\right) \cdot \left(\tan^{-1}_* \frac{im}{re} \cdot \tan^{-1}_* \frac{im}{re}\right)\right)}\\
\mathbf{elif}\;re \le 1.176053285745482087138737609815998496376 \cdot 10^{-249}:\\
\;\;\;\;\frac{-\log im}{-\log base}\\
\mathbf{elif}\;re \le 4.307827805178678655155131557660296799377 \cdot 10^{133}:\\
\;\;\;\;\frac{\left(\tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \left(\tan^{-1}_* \frac{im}{re} \cdot 0.0\right) - \left(\log base \cdot \log \left(\sqrt{re \cdot re + im \cdot im}\right)\right) \cdot \left(\log base \cdot \log \left(\sqrt{re \cdot re + im \cdot im}\right)\right)}{\left({\left(\log base\right)}^{4} - {0.0}^{4}\right) \cdot \left(\tan^{-1}_* \frac{im}{re} \cdot 0.0 - \log base \cdot \log \left(\sqrt{re \cdot re + im \cdot im}\right)\right)} \cdot \left(\log base \cdot \log base - 0.0 \cdot 0.0\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\log re}{\log base}\\
\end{array}double f(double re, double im, double base) {
double r130513 = re;
double r130514 = r130513 * r130513;
double r130515 = im;
double r130516 = r130515 * r130515;
double r130517 = r130514 + r130516;
double r130518 = sqrt(r130517);
double r130519 = log(r130518);
double r130520 = base;
double r130521 = log(r130520);
double r130522 = r130519 * r130521;
double r130523 = atan2(r130515, r130513);
double r130524 = 0.0;
double r130525 = r130523 * r130524;
double r130526 = r130522 + r130525;
double r130527 = r130521 * r130521;
double r130528 = r130524 * r130524;
double r130529 = r130527 + r130528;
double r130530 = r130526 / r130529;
return r130530;
}
double f(double re, double im, double base) {
double r130531 = re;
double r130532 = -8.872872797015364e+107;
bool r130533 = r130531 <= r130532;
double r130534 = im;
double r130535 = atan2(r130534, r130531);
double r130536 = 0.0;
double r130537 = r130535 * r130536;
double r130538 = -1.0;
double r130539 = r130538 / r130531;
double r130540 = log(r130539);
double r130541 = base;
double r130542 = log(r130541);
double r130543 = -r130542;
double r130544 = r130540 * r130543;
double r130545 = r130537 + r130544;
double r130546 = r130542 * r130542;
double r130547 = r130536 * r130536;
double r130548 = r130546 + r130547;
double r130549 = r130545 / r130548;
double r130550 = -1.718328802427039e-278;
bool r130551 = r130531 <= r130550;
double r130552 = 3.0;
double r130553 = pow(r130537, r130552);
double r130554 = r130531 * r130531;
double r130555 = r130534 * r130534;
double r130556 = r130554 + r130555;
double r130557 = sqrt(r130556);
double r130558 = log(r130557);
double r130559 = r130542 * r130558;
double r130560 = pow(r130559, r130552);
double r130561 = r130553 + r130560;
double r130562 = 2.0;
double r130563 = pow(r130542, r130562);
double r130564 = r130563 + r130547;
double r130565 = r130559 - r130537;
double r130566 = r130559 * r130565;
double r130567 = r130535 * r130535;
double r130568 = r130547 * r130567;
double r130569 = r130566 + r130568;
double r130570 = r130564 * r130569;
double r130571 = r130561 / r130570;
double r130572 = 1.176053285745482e-249;
bool r130573 = r130531 <= r130572;
double r130574 = log(r130534);
double r130575 = -r130574;
double r130576 = r130575 / r130543;
double r130577 = 4.3078278051786787e+133;
bool r130578 = r130531 <= r130577;
double r130579 = r130537 * r130537;
double r130580 = r130559 * r130559;
double r130581 = r130579 - r130580;
double r130582 = 4.0;
double r130583 = pow(r130542, r130582);
double r130584 = pow(r130536, r130582);
double r130585 = r130583 - r130584;
double r130586 = r130537 - r130559;
double r130587 = r130585 * r130586;
double r130588 = r130581 / r130587;
double r130589 = r130546 - r130547;
double r130590 = r130588 * r130589;
double r130591 = log(r130531);
double r130592 = r130591 / r130542;
double r130593 = r130578 ? r130590 : r130592;
double r130594 = r130573 ? r130576 : r130593;
double r130595 = r130551 ? r130571 : r130594;
double r130596 = r130533 ? r130549 : r130595;
return r130596;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -8.872872797015364e+107Initial program 53.0
Simplified53.0
Taylor expanded around -inf 64.0
Simplified8.5
if -8.872872797015364e+107 < re < -1.718328802427039e-278Initial program 20.3
Simplified20.3
rmApplied flip3-+20.4
Applied associate-/l/20.4
Simplified20.4
if -1.718328802427039e-278 < re < 1.176053285745482e-249Initial program 32.4
Simplified32.4
Taylor expanded around inf 32.4
Simplified32.4
if 1.176053285745482e-249 < re < 4.3078278051786787e+133Initial program 19.7
Simplified19.7
rmApplied flip-+19.7
Applied associate-/r/19.7
Simplified19.7
rmApplied flip-+19.7
Applied associate-/l/19.8
Simplified19.8
if 4.3078278051786787e+133 < re Initial program 58.9
Simplified58.9
Taylor expanded around 0 8.0
Final simplification17.5
herbie shell --seed 2019179
(FPCore (re im base)
:name "math.log/2 on complex, real part"
(/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0.0)) (+ (* (log base) (log base)) (* 0.0 0.0))))