\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}\;im \le -5.802716825709030303495598988914918946689 \cdot 10^{87}:\\
\;\;\;\;-\frac{\log \left(\frac{-1}{im}\right)}{\log base}\\
\mathbf{elif}\;im \le -4.758264364879206199461529726225257410966 \cdot 10^{-176}:\\
\;\;\;\;\frac{\tan^{-1}_* \frac{im}{re} \cdot 0.0 + \log \left(\sqrt{im \cdot im + re \cdot re}\right) \cdot \log base}{0.0 \cdot 0.0 + \left(\left(\log \left(\sqrt[3]{base}\right) \cdot 2\right) \cdot \log base + \log \left(\sqrt[3]{base}\right) \cdot \log base\right)}\\
\mathbf{elif}\;im \le -2.837677287967872336993894067966499854324 \cdot 10^{-260}:\\
\;\;\;\;\frac{-\log re}{-\log base}\\
\mathbf{elif}\;im \le -7.909982710609458265182257197952783295768 \cdot 10^{-293}:\\
\;\;\;\;\frac{1}{\sqrt{0.0 \cdot 0.0 + {\left(\log base\right)}^{2}}} \cdot \frac{\tan^{-1}_* \frac{im}{re} \cdot 0.0 + \log base \cdot \log \left(-re\right)}{\sqrt{0.0 \cdot 0.0 + {\left(\log base\right)}^{2}}}\\
\mathbf{elif}\;im \le 5.548497518142956227437704972905237987921 \cdot 10^{-237}:\\
\;\;\;\;\frac{-\log re}{-\log base}\\
\mathbf{elif}\;im \le 2.124125077098971279585872547613789818502 \cdot 10^{117}:\\
\;\;\;\;\frac{\tan^{-1}_* \frac{im}{re} \cdot 0.0 + \log \left(\sqrt{im \cdot im + re \cdot re}\right) \cdot \log base}{\sqrt{0.0 \cdot 0.0 + {\left(\log base\right)}^{2}}} \cdot \frac{1}{\sqrt{0.0 \cdot 0.0 + {\left(\log base\right)}^{2}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log im}{\log base}\\
\end{array}double f(double re, double im, double base) {
double r55614 = re;
double r55615 = r55614 * r55614;
double r55616 = im;
double r55617 = r55616 * r55616;
double r55618 = r55615 + r55617;
double r55619 = sqrt(r55618);
double r55620 = log(r55619);
double r55621 = base;
double r55622 = log(r55621);
double r55623 = r55620 * r55622;
double r55624 = atan2(r55616, r55614);
double r55625 = 0.0;
double r55626 = r55624 * r55625;
double r55627 = r55623 + r55626;
double r55628 = r55622 * r55622;
double r55629 = r55625 * r55625;
double r55630 = r55628 + r55629;
double r55631 = r55627 / r55630;
return r55631;
}
double f(double re, double im, double base) {
double r55632 = im;
double r55633 = -5.80271682570903e+87;
bool r55634 = r55632 <= r55633;
double r55635 = -1.0;
double r55636 = r55635 / r55632;
double r55637 = log(r55636);
double r55638 = base;
double r55639 = log(r55638);
double r55640 = r55637 / r55639;
double r55641 = -r55640;
double r55642 = -4.758264364879206e-176;
bool r55643 = r55632 <= r55642;
double r55644 = re;
double r55645 = atan2(r55632, r55644);
double r55646 = 0.0;
double r55647 = r55645 * r55646;
double r55648 = r55632 * r55632;
double r55649 = r55644 * r55644;
double r55650 = r55648 + r55649;
double r55651 = sqrt(r55650);
double r55652 = log(r55651);
double r55653 = r55652 * r55639;
double r55654 = r55647 + r55653;
double r55655 = r55646 * r55646;
double r55656 = cbrt(r55638);
double r55657 = log(r55656);
double r55658 = 2.0;
double r55659 = r55657 * r55658;
double r55660 = r55659 * r55639;
double r55661 = r55657 * r55639;
double r55662 = r55660 + r55661;
double r55663 = r55655 + r55662;
double r55664 = r55654 / r55663;
double r55665 = -2.8376772879678723e-260;
bool r55666 = r55632 <= r55665;
double r55667 = log(r55644);
double r55668 = -r55667;
double r55669 = -r55639;
double r55670 = r55668 / r55669;
double r55671 = -7.909982710609458e-293;
bool r55672 = r55632 <= r55671;
double r55673 = 1.0;
double r55674 = pow(r55639, r55658);
double r55675 = r55655 + r55674;
double r55676 = sqrt(r55675);
double r55677 = r55673 / r55676;
double r55678 = -r55644;
double r55679 = log(r55678);
double r55680 = r55639 * r55679;
double r55681 = r55647 + r55680;
double r55682 = r55681 / r55676;
double r55683 = r55677 * r55682;
double r55684 = 5.548497518142956e-237;
bool r55685 = r55632 <= r55684;
double r55686 = 2.1241250770989713e+117;
bool r55687 = r55632 <= r55686;
double r55688 = r55654 / r55676;
double r55689 = r55688 * r55677;
double r55690 = log(r55632);
double r55691 = r55690 / r55639;
double r55692 = r55687 ? r55689 : r55691;
double r55693 = r55685 ? r55670 : r55692;
double r55694 = r55672 ? r55683 : r55693;
double r55695 = r55666 ? r55670 : r55694;
double r55696 = r55643 ? r55664 : r55695;
double r55697 = r55634 ? r55641 : r55696;
return r55697;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if im < -5.80271682570903e+87Initial program 50.4
Simplified50.4
Taylor expanded around -inf 64.0
Simplified9.0
if -5.80271682570903e+87 < im < -4.758264364879206e-176Initial program 16.9
Simplified16.9
rmApplied add-cube-cbrt16.9
Applied log-prod16.9
Applied distribute-lft-in16.9
Simplified16.9
if -4.758264364879206e-176 < im < -2.8376772879678723e-260 or -7.909982710609458e-293 < im < 5.548497518142956e-237Initial program 31.4
Simplified31.4
rmApplied add-sqr-sqrt31.4
Applied *-un-lft-identity31.4
Applied times-frac31.4
Simplified31.4
Simplified31.4
Taylor expanded around inf 32.9
Simplified32.9
if -2.8376772879678723e-260 < im < -7.909982710609458e-293Initial program 30.4
Simplified30.4
rmApplied add-sqr-sqrt30.4
Applied *-un-lft-identity30.4
Applied times-frac30.4
Simplified30.4
Simplified30.4
Taylor expanded around -inf 33.7
Simplified33.7
if 5.548497518142956e-237 < im < 2.1241250770989713e+117Initial program 18.9
Simplified18.9
rmApplied add-sqr-sqrt18.9
Applied *-un-lft-identity18.9
Applied times-frac18.9
Simplified18.9
Simplified18.9
if 2.1241250770989713e+117 < im Initial program 54.3
Simplified54.3
rmApplied add-sqr-sqrt54.3
Applied *-un-lft-identity54.3
Applied times-frac54.3
Simplified54.3
Simplified54.3
Taylor expanded around 0 8.1
Final simplification17.3
herbie shell --seed 2019174
(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))))