\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 r31216 = re;
double r31217 = r31216 * r31216;
double r31218 = im;
double r31219 = r31218 * r31218;
double r31220 = r31217 + r31219;
double r31221 = sqrt(r31220);
double r31222 = log(r31221);
return r31222;
}
double f(double re, double im) {
double r31223 = im;
double r31224 = -2.9574832218065225e+136;
bool r31225 = r31223 <= r31224;
double r31226 = re;
double r31227 = log(r31226);
double r31228 = -6.570997735276895e+56;
bool r31229 = r31223 <= r31228;
double r31230 = r31226 * r31226;
double r31231 = r31223 * r31223;
double r31232 = r31230 + r31231;
double r31233 = sqrt(r31232);
double r31234 = log(r31233);
double r31235 = -3.0545556871718285e+33;
bool r31236 = r31223 <= r31235;
double r31237 = -r31226;
double r31238 = log(r31237);
double r31239 = -4.843689540090472e-262;
bool r31240 = r31223 <= r31239;
double r31241 = 9.677784630305516e-234;
bool r31242 = r31223 <= r31241;
double r31243 = 3.867993196915089e-217;
bool r31244 = r31223 <= r31243;
double r31245 = 1.0098112259657446e-185;
bool r31246 = r31223 <= r31245;
double r31247 = 5.177363335544844e+86;
bool r31248 = r31223 <= r31247;
double r31249 = log(r31223);
double r31250 = r31248 ? r31234 : r31249;
double r31251 = r31246 ? r31227 : r31250;
double r31252 = r31244 ? r31238 : r31251;
double r31253 = r31242 ? r31227 : r31252;
double r31254 = r31240 ? r31234 : r31253;
double r31255 = r31236 ? r31238 : r31254;
double r31256 = r31229 ? r31234 : r31255;
double r31257 = r31225 ? r31227 : r31256;
return r31257;
}



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)))))