\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;im \le -2.957483221806522487658889360988388662853 \cdot 10^{136}:\\
\;\;\;\;\log re\\
\mathbf{elif}\;im \le -6.570997735276894967118260067026371622396 \cdot 10^{56}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{elif}\;im \le -3054555687171828544312670244831232:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;im \le -4.843689540090472204066045131134642712938 \cdot 10^{-262}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{elif}\;im \le 9.677784630305516420633165389576243090092 \cdot 10^{-234}:\\
\;\;\;\;\log re\\
\mathbf{elif}\;im \le 3.867993196915089402122192166122080152846 \cdot 10^{-217}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;im \le 1.009811225965744635764018839775433289102 \cdot 10^{-185}:\\
\;\;\;\;\log re\\
\mathbf{elif}\;im \le 5.177363335544844238286158381799834195072 \cdot 10^{86}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{else}:\\
\;\;\;\;\log im\\
\end{array}double f(double re, double im) {
double r31030 = re;
double r31031 = r31030 * r31030;
double r31032 = im;
double r31033 = r31032 * r31032;
double r31034 = r31031 + r31033;
double r31035 = sqrt(r31034);
double r31036 = log(r31035);
return r31036;
}
double f(double re, double im) {
double r31037 = im;
double r31038 = -2.9574832218065225e+136;
bool r31039 = r31037 <= r31038;
double r31040 = re;
double r31041 = log(r31040);
double r31042 = -6.570997735276895e+56;
bool r31043 = r31037 <= r31042;
double r31044 = r31040 * r31040;
double r31045 = r31037 * r31037;
double r31046 = r31044 + r31045;
double r31047 = sqrt(r31046);
double r31048 = log(r31047);
double r31049 = -3.0545556871718285e+33;
bool r31050 = r31037 <= r31049;
double r31051 = -r31040;
double r31052 = log(r31051);
double r31053 = -4.843689540090472e-262;
bool r31054 = r31037 <= r31053;
double r31055 = 9.677784630305516e-234;
bool r31056 = r31037 <= r31055;
double r31057 = 3.867993196915089e-217;
bool r31058 = r31037 <= r31057;
double r31059 = 1.0098112259657446e-185;
bool r31060 = r31037 <= r31059;
double r31061 = 5.177363335544844e+86;
bool r31062 = r31037 <= r31061;
double r31063 = log(r31037);
double r31064 = r31062 ? r31048 : r31063;
double r31065 = r31060 ? r31041 : r31064;
double r31066 = r31058 ? r31052 : r31065;
double r31067 = r31056 ? r31041 : r31066;
double r31068 = r31054 ? r31048 : r31067;
double r31069 = r31050 ? r31052 : r31068;
double r31070 = r31043 ? r31048 : r31069;
double r31071 = r31039 ? r31041 : r31070;
return r31071;
}



Bits error versus re



Bits error versus im
Results
if im < -2.9574832218065225e+136 or -4.843689540090472e-262 < im < 9.677784630305516e-234 or 3.867993196915089e-217 < im < 1.0098112259657446e-185Initial program 46.9
Taylor expanded around inf 45.6
if -2.9574832218065225e+136 < im < -6.570997735276895e+56 or -3.0545556871718285e+33 < im < -4.843689540090472e-262 or 1.0098112259657446e-185 < im < 5.177363335544844e+86Initial program 18.3
if -6.570997735276895e+56 < im < -3.0545556871718285e+33 or 9.677784630305516e-234 < im < 3.867993196915089e-217Initial program 26.8
Taylor expanded around -inf 39.3
Simplified39.3
if 5.177363335544844e+86 < im Initial program 48.2
Taylor expanded around 0 9.5
Final simplification24.6
herbie shell --seed 2019326
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))