\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -3.510504290224585263553036624607276929802 \cdot 10^{110}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;re \le 2.808181869483482800731614586522121158678 \cdot 10^{83}:\\
\;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}double f(double re, double im) {
double r3351835 = re;
double r3351836 = r3351835 * r3351835;
double r3351837 = im;
double r3351838 = r3351837 * r3351837;
double r3351839 = r3351836 + r3351838;
double r3351840 = sqrt(r3351839);
double r3351841 = log(r3351840);
return r3351841;
}
double f(double re, double im) {
double r3351842 = re;
double r3351843 = -3.510504290224585e+110;
bool r3351844 = r3351842 <= r3351843;
double r3351845 = -r3351842;
double r3351846 = log(r3351845);
double r3351847 = 2.808181869483483e+83;
bool r3351848 = r3351842 <= r3351847;
double r3351849 = im;
double r3351850 = r3351849 * r3351849;
double r3351851 = r3351842 * r3351842;
double r3351852 = r3351850 + r3351851;
double r3351853 = sqrt(r3351852);
double r3351854 = log(r3351853);
double r3351855 = log(r3351842);
double r3351856 = r3351848 ? r3351854 : r3351855;
double r3351857 = r3351844 ? r3351846 : r3351856;
return r3351857;
}



Bits error versus re



Bits error versus im
Results
if re < -3.510504290224585e+110Initial program 52.9
Taylor expanded around -inf 7.5
Simplified7.5
if -3.510504290224585e+110 < re < 2.808181869483483e+83Initial program 21.9
if 2.808181869483483e+83 < re Initial program 47.9
Taylor expanded around inf 9.8
Final simplification17.3
herbie shell --seed 2019168
(FPCore (re im)
:name "math.log/1 on complex, real part"
(log (sqrt (+ (* re re) (* im im)))))