\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -1.156407601863717509012505141513837828653 \cdot 10^{112}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;re \le 1.244988213884062755522549209945596691708 \cdot 10^{138}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}double f(double re, double im) {
double r89510 = re;
double r89511 = r89510 * r89510;
double r89512 = im;
double r89513 = r89512 * r89512;
double r89514 = r89511 + r89513;
double r89515 = sqrt(r89514);
double r89516 = log(r89515);
return r89516;
}
double f(double re, double im) {
double r89517 = re;
double r89518 = -1.1564076018637175e+112;
bool r89519 = r89517 <= r89518;
double r89520 = -r89517;
double r89521 = log(r89520);
double r89522 = 1.2449882138840628e+138;
bool r89523 = r89517 <= r89522;
double r89524 = r89517 * r89517;
double r89525 = im;
double r89526 = r89525 * r89525;
double r89527 = r89524 + r89526;
double r89528 = sqrt(r89527);
double r89529 = log(r89528);
double r89530 = log(r89517);
double r89531 = r89523 ? r89529 : r89530;
double r89532 = r89519 ? r89521 : r89531;
return r89532;
}



Bits error versus re



Bits error versus im
Results
if re < -1.1564076018637175e+112Initial program 52.8
Taylor expanded around -inf 8.1
Simplified8.1
if -1.1564076018637175e+112 < re < 1.2449882138840628e+138Initial program 21.7
if 1.2449882138840628e+138 < re Initial program 58.8
Taylor expanded around inf 7.6
Final simplification17.5
herbie shell --seed 2019323
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))