\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \leq -1.1762247444222311 \cdot 10^{+151}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;re \leq 1.3781415203379638 \cdot 10^{-202} \lor \neg \left(re \leq 1.1082609750789312 \cdot 10^{-166}\right) \land re \leq 1.4551030635736294 \cdot 10^{+82}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}(FPCore (re im) :precision binary64 (log (sqrt (+ (* re re) (* im im)))))
(FPCore (re im)
:precision binary64
(if (<= re -1.1762247444222311e+151)
(log (- re))
(if (or (<= re 1.3781415203379638e-202)
(and (not (<= re 1.1082609750789312e-166))
(<= re 1.4551030635736294e+82)))
(log (sqrt (+ (* re re) (* im im))))
(log re))))double code(double re, double im) {
return log(sqrt((re * re) + (im * im)));
}
double code(double re, double im) {
double tmp;
if (re <= -1.1762247444222311e+151) {
tmp = log(-re);
} else if ((re <= 1.3781415203379638e-202) || (!(re <= 1.1082609750789312e-166) && (re <= 1.4551030635736294e+82))) {
tmp = log(sqrt((re * re) + (im * im)));
} else {
tmp = log(re);
}
return tmp;
}



Bits error versus re



Bits error versus im
Results
if re < -1.17622474442223108e151Initial program 63.2
Taylor expanded around -inf 6.6
Simplified6.6
if -1.17622474442223108e151 < re < 1.37814152033796385e-202 or 1.1082609750789312e-166 < re < 1.4551030635736294e82Initial program 20.4
if 1.37814152033796385e-202 < re < 1.1082609750789312e-166 or 1.4551030635736294e82 < re Initial program 47.0
Taylor expanded around inf 14.8
Final simplification17.3
herbie shell --seed 2020292
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))