\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -2.0142287793804751 \cdot 10^{118}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \log \left(\frac{-1}{re}\right)\right)\\
\mathbf{elif}\;re \le 6.23122095692666968 \cdot 10^{141}:\\
\;\;\;\;\frac{1}{2} \cdot \log \left(re \cdot re + im \cdot im\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}double f(double re, double im) {
double r61503 = re;
double r61504 = r61503 * r61503;
double r61505 = im;
double r61506 = r61505 * r61505;
double r61507 = r61504 + r61506;
double r61508 = sqrt(r61507);
double r61509 = log(r61508);
return r61509;
}
double f(double re, double im) {
double r61510 = re;
double r61511 = -2.0142287793804751e+118;
bool r61512 = r61510 <= r61511;
double r61513 = 1.0;
double r61514 = 2.0;
double r61515 = r61513 / r61514;
double r61516 = -2.0;
double r61517 = -1.0;
double r61518 = r61517 / r61510;
double r61519 = log(r61518);
double r61520 = r61516 * r61519;
double r61521 = r61515 * r61520;
double r61522 = 6.23122095692667e+141;
bool r61523 = r61510 <= r61522;
double r61524 = r61510 * r61510;
double r61525 = im;
double r61526 = r61525 * r61525;
double r61527 = r61524 + r61526;
double r61528 = log(r61527);
double r61529 = r61515 * r61528;
double r61530 = log(r61510);
double r61531 = r61523 ? r61529 : r61530;
double r61532 = r61512 ? r61521 : r61531;
return r61532;
}



Bits error versus re



Bits error versus im
Results
if re < -2.0142287793804751e+118Initial program 55.0
rmApplied pow155.0
Applied sqrt-pow155.0
Applied log-pow55.0
Taylor expanded around -inf 8.4
Simplified8.4
if -2.0142287793804751e+118 < re < 6.23122095692667e+141Initial program 20.9
rmApplied pow120.9
Applied sqrt-pow120.9
Applied log-pow20.9
if 6.23122095692667e+141 < re Initial program 60.0
Taylor expanded around inf 7.5
Final simplification17.1
herbie shell --seed 2020042
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))