\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 -2.45129504800494533021927076530083244608 \cdot 10^{86}:\\
\;\;\;\;\frac{\left(-\log \left(\frac{-1}{re}\right)\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\\
\mathbf{elif}\;re \le -3.404337242509125340591714753951217365262 \cdot 10^{-239}:\\
\;\;\;\;\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\left(\log base \cdot \left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) + \log \left(\sqrt[3]{base}\right) \cdot \log base\right) + 0.0 \cdot 0.0}\\
\mathbf{elif}\;re \le 2.029566204712021320043558610301436046335 \cdot 10^{-265}:\\
\;\;\;\;\frac{\log im \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\\
\mathbf{elif}\;re \le 3.761101708531406125469403281793612063172 \cdot 10^{48}:\\
\;\;\;\;\frac{\left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base\right) \cdot \left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base\right) - \left(\tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \left(\tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}{\left(0.0 \cdot 0.0 + {\left(\log base\right)}^{2}\right) \cdot \left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base - \tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{-\log re}{-\log base}\\
\end{array}double f(double re, double im, double base) {
double r43421 = re;
double r43422 = r43421 * r43421;
double r43423 = im;
double r43424 = r43423 * r43423;
double r43425 = r43422 + r43424;
double r43426 = sqrt(r43425);
double r43427 = log(r43426);
double r43428 = base;
double r43429 = log(r43428);
double r43430 = r43427 * r43429;
double r43431 = atan2(r43423, r43421);
double r43432 = 0.0;
double r43433 = r43431 * r43432;
double r43434 = r43430 + r43433;
double r43435 = r43429 * r43429;
double r43436 = r43432 * r43432;
double r43437 = r43435 + r43436;
double r43438 = r43434 / r43437;
return r43438;
}
double f(double re, double im, double base) {
double r43439 = re;
double r43440 = -2.4512950480049453e+86;
bool r43441 = r43439 <= r43440;
double r43442 = -1.0;
double r43443 = r43442 / r43439;
double r43444 = log(r43443);
double r43445 = -r43444;
double r43446 = base;
double r43447 = log(r43446);
double r43448 = r43445 * r43447;
double r43449 = im;
double r43450 = atan2(r43449, r43439);
double r43451 = 0.0;
double r43452 = r43450 * r43451;
double r43453 = r43448 + r43452;
double r43454 = r43447 * r43447;
double r43455 = r43451 * r43451;
double r43456 = r43454 + r43455;
double r43457 = r43453 / r43456;
double r43458 = -3.4043372425091253e-239;
bool r43459 = r43439 <= r43458;
double r43460 = r43439 * r43439;
double r43461 = r43449 * r43449;
double r43462 = r43460 + r43461;
double r43463 = sqrt(r43462);
double r43464 = log(r43463);
double r43465 = r43464 * r43447;
double r43466 = r43465 + r43452;
double r43467 = 2.0;
double r43468 = cbrt(r43446);
double r43469 = log(r43468);
double r43470 = r43467 * r43469;
double r43471 = r43447 * r43470;
double r43472 = r43469 * r43447;
double r43473 = r43471 + r43472;
double r43474 = r43473 + r43455;
double r43475 = r43466 / r43474;
double r43476 = 2.0295662047120213e-265;
bool r43477 = r43439 <= r43476;
double r43478 = log(r43449);
double r43479 = r43478 * r43447;
double r43480 = r43479 + r43452;
double r43481 = r43480 / r43456;
double r43482 = 3.761101708531406e+48;
bool r43483 = r43439 <= r43482;
double r43484 = r43465 * r43465;
double r43485 = r43452 * r43452;
double r43486 = r43484 - r43485;
double r43487 = pow(r43447, r43467);
double r43488 = r43455 + r43487;
double r43489 = r43465 - r43452;
double r43490 = r43488 * r43489;
double r43491 = r43486 / r43490;
double r43492 = log(r43439);
double r43493 = -r43492;
double r43494 = -r43447;
double r43495 = r43493 / r43494;
double r43496 = r43483 ? r43491 : r43495;
double r43497 = r43477 ? r43481 : r43496;
double r43498 = r43459 ? r43475 : r43497;
double r43499 = r43441 ? r43457 : r43498;
return r43499;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -2.4512950480049453e+86Initial program 49.2
Taylor expanded around -inf 64.0
Simplified9.7
if -2.4512950480049453e+86 < re < -3.4043372425091253e-239Initial program 19.7
rmApplied add-cube-cbrt19.7
Applied log-prod19.7
Applied distribute-lft-in19.7
Simplified19.7
Simplified19.7
if -3.4043372425091253e-239 < re < 2.0295662047120213e-265Initial program 30.1
Taylor expanded around 0 33.8
if 2.0295662047120213e-265 < re < 3.761101708531406e+48Initial program 20.0
rmApplied flip-+20.1
Applied associate-/l/20.1
Simplified20.1
if 3.761101708531406e+48 < re Initial program 45.0
Taylor expanded around inf 11.7
Simplified11.7
Final simplification17.7
herbie shell --seed 2019208
(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))))