\log \left(\sqrt{re \cdot re + im \cdot im}\right)\begin{array}{l}
\mathbf{if}\;re \le -6.6680059753335194 \cdot 10^{135}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\
\mathbf{elif}\;re \le -1.0951361490029777 \cdot 10^{-160}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{elif}\;re \le -1.4034448373480268 \cdot 10^{-212}:\\
\;\;\;\;\log im\\
\mathbf{elif}\;re \le 5.0001842566281268 \cdot 10^{-304}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{elif}\;re \le 7.54212455848276206 \cdot 10^{-167}:\\
\;\;\;\;\log im\\
\mathbf{elif}\;re \le 5.111282847825261 \cdot 10^{121}:\\
\;\;\;\;\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 VAR;
if ((re <= -6.66800597533352e+135)) {
VAR = log((-1.0 * re));
} else {
double VAR_1;
if ((re <= -1.0951361490029777e-160)) {
VAR_1 = log(sqrt(((re * re) + (im * im))));
} else {
double VAR_2;
if ((re <= -1.4034448373480268e-212)) {
VAR_2 = log(im);
} else {
double VAR_3;
if ((re <= 5.000184256628127e-304)) {
VAR_3 = log(sqrt(((re * re) + (im * im))));
} else {
double VAR_4;
if ((re <= 7.542124558482762e-167)) {
VAR_4 = log(im);
} else {
double VAR_5;
if ((re <= 5.111282847825261e+121)) {
VAR_5 = log(sqrt(((re * re) + (im * im))));
} else {
VAR_5 = log(re);
}
VAR_4 = VAR_5;
}
VAR_3 = VAR_4;
}
VAR_2 = VAR_3;
}
VAR_1 = VAR_2;
}
VAR = VAR_1;
}
return VAR;
}



Bits error versus re



Bits error versus im
Results
if re < -6.66800597533352e+135Initial program 59.8
Taylor expanded around -inf 8.1
if -6.66800597533352e+135 < re < -1.0951361490029777e-160 or -1.4034448373480268e-212 < re < 5.000184256628127e-304 or 7.542124558482762e-167 < re < 5.111282847825261e+121Initial program 18.8
if -1.0951361490029777e-160 < re < -1.4034448373480268e-212 or 5.000184256628127e-304 < re < 7.542124558482762e-167Initial program 31.4
Taylor expanded around 0 34.1
if 5.111282847825261e+121 < re Initial program 56.3
Taylor expanded around inf 8.2
Final simplification18.2
herbie shell --seed 2020078
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))