\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -6.070696817770049897362818226450973536409 \cdot 10^{119}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;re \le 2.290849821627844438172782342942280157051 \cdot 10^{117}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}double f(double re, double im) {
double r29259 = re;
double r29260 = r29259 * r29259;
double r29261 = im;
double r29262 = r29261 * r29261;
double r29263 = r29260 + r29262;
double r29264 = sqrt(r29263);
double r29265 = log(r29264);
return r29265;
}
double f(double re, double im) {
double r29266 = re;
double r29267 = -6.07069681777005e+119;
bool r29268 = r29266 <= r29267;
double r29269 = -r29266;
double r29270 = log(r29269);
double r29271 = 2.2908498216278444e+117;
bool r29272 = r29266 <= r29271;
double r29273 = r29266 * r29266;
double r29274 = im;
double r29275 = r29274 * r29274;
double r29276 = r29273 + r29275;
double r29277 = sqrt(r29276);
double r29278 = log(r29277);
double r29279 = log(r29266);
double r29280 = r29272 ? r29278 : r29279;
double r29281 = r29268 ? r29270 : r29280;
return r29281;
}



Bits error versus re



Bits error versus im
Results
if re < -6.07069681777005e+119Initial program 55.6
Taylor expanded around -inf 8.0
Simplified8.0
if -6.07069681777005e+119 < re < 2.2908498216278444e+117Initial program 21.3
if 2.2908498216278444e+117 < re Initial program 53.6
Taylor expanded around inf 7.8
Final simplification17.3
herbie shell --seed 2019303
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))