\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -1.2548154926707317 \cdot 10^{+121}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;re \le 3.721264707224919 \cdot 10^{+102}:\\
\;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}double f(double re, double im) {
double r1148837 = re;
double r1148838 = r1148837 * r1148837;
double r1148839 = im;
double r1148840 = r1148839 * r1148839;
double r1148841 = r1148838 + r1148840;
double r1148842 = sqrt(r1148841);
double r1148843 = log(r1148842);
return r1148843;
}
double f(double re, double im) {
double r1148844 = re;
double r1148845 = -1.2548154926707317e+121;
bool r1148846 = r1148844 <= r1148845;
double r1148847 = -r1148844;
double r1148848 = log(r1148847);
double r1148849 = 3.721264707224919e+102;
bool r1148850 = r1148844 <= r1148849;
double r1148851 = im;
double r1148852 = r1148851 * r1148851;
double r1148853 = r1148844 * r1148844;
double r1148854 = r1148852 + r1148853;
double r1148855 = sqrt(r1148854);
double r1148856 = log(r1148855);
double r1148857 = log(r1148844);
double r1148858 = r1148850 ? r1148856 : r1148857;
double r1148859 = r1148846 ? r1148848 : r1148858;
return r1148859;
}



Bits error versus re



Bits error versus im
Results
if re < -1.2548154926707317e+121Initial program 53.8
Taylor expanded around -inf 7.3
Simplified7.3
if -1.2548154926707317e+121 < re < 3.721264707224919e+102Initial program 20.1
if 3.721264707224919e+102 < re Initial program 51.4
Taylor expanded around inf 8.3
Final simplification16.2
herbie shell --seed 2019152
(FPCore (re im)
:name "math.log/1 on complex, real part"
(log (sqrt (+ (* re re) (* im im)))))