\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -4.5550581562043043 \cdot 10^{140}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\
\mathbf{elif}\;re \le 1.91778537755399791 \cdot 10^{101}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{else}:\\
\;\;\;\;\log re\\
\end{array}double code(double re, double im) {
return log(sqrt(((re * re) + (im * im))));
}
double code(double re, double im) {
double temp;
if ((re <= -4.555058156204304e+140)) {
temp = log((-1.0 * re));
} else {
double temp_1;
if ((re <= 1.917785377553998e+101)) {
temp_1 = log(sqrt(((re * re) + (im * im))));
} else {
temp_1 = log(re);
}
temp = temp_1;
}
return temp;
}



Bits error versus re



Bits error versus im
Results
if re < -4.555058156204304e+140Initial program 60.4
Taylor expanded around -inf 6.8
if -4.555058156204304e+140 < re < 1.917785377553998e+101Initial program 21.0
if 1.917785377553998e+101 < re Initial program 51.6
Taylor expanded around inf 7.8
Final simplification16.8
herbie shell --seed 2020066
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))