\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -9.983262521343274363476799981820042586015 \cdot 10^{136}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\
\mathbf{elif}\;re \le 2.715346883449109812449415853977495365892 \cdot 10^{73}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}double f(double re, double im) {
double r55054 = re;
double r55055 = r55054 * r55054;
double r55056 = im;
double r55057 = r55056 * r55056;
double r55058 = r55055 + r55057;
double r55059 = sqrt(r55058);
double r55060 = log(r55059);
return r55060;
}
double f(double re, double im) {
double r55061 = re;
double r55062 = -9.983262521343274e+136;
bool r55063 = r55061 <= r55062;
double r55064 = -1.0;
double r55065 = r55064 * r55061;
double r55066 = log(r55065);
double r55067 = 2.7153468834491098e+73;
bool r55068 = r55061 <= r55067;
double r55069 = r55061 * r55061;
double r55070 = im;
double r55071 = r55070 * r55070;
double r55072 = r55069 + r55071;
double r55073 = sqrt(r55072);
double r55074 = log(r55073);
double r55075 = log(r55061);
double r55076 = r55068 ? r55074 : r55075;
double r55077 = r55063 ? r55066 : r55076;
return r55077;
}



Bits error versus re



Bits error versus im
Results
if re < -9.983262521343274e+136Initial program 59.7
Taylor expanded around -inf 7.8
if -9.983262521343274e+136 < re < 2.7153468834491098e+73Initial program 21.8
if 2.7153468834491098e+73 < re Initial program 47.0
Taylor expanded around inf 8.9
Final simplification17.3
herbie shell --seed 2019304
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))