\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -3.201775397353183 \cdot 10^{+150}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;re \le 7.407160440832304 \cdot 10^{+80}:\\
\;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}double f(double re, double im) {
double r643347 = re;
double r643348 = r643347 * r643347;
double r643349 = im;
double r643350 = r643349 * r643349;
double r643351 = r643348 + r643350;
double r643352 = sqrt(r643351);
double r643353 = log(r643352);
return r643353;
}
double f(double re, double im) {
double r643354 = re;
double r643355 = -3.201775397353183e+150;
bool r643356 = r643354 <= r643355;
double r643357 = -r643354;
double r643358 = log(r643357);
double r643359 = 7.407160440832304e+80;
bool r643360 = r643354 <= r643359;
double r643361 = im;
double r643362 = r643361 * r643361;
double r643363 = r643354 * r643354;
double r643364 = r643362 + r643363;
double r643365 = sqrt(r643364);
double r643366 = log(r643365);
double r643367 = log(r643354);
double r643368 = r643360 ? r643366 : r643367;
double r643369 = r643356 ? r643358 : r643368;
return r643369;
}



Bits error versus re



Bits error versus im
Results
if re < -3.201775397353183e+150Initial program 60.5
Taylor expanded around -inf 6.1
Simplified6.1
if -3.201775397353183e+150 < re < 7.407160440832304e+80Initial program 21.1
if 7.407160440832304e+80 < re Initial program 47.3
Taylor expanded around inf 9.9
Final simplification17.1
herbie shell --seed 2019141
(FPCore (re im)
:name "math.log/1 on complex, real part"
(log (sqrt (+ (* re re) (* im im)))))