\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\begin{array}{l}
\mathbf{if}\;im \le -3.247335420066394 \cdot 10^{+143}:\\
\;\;\;\;\frac{\log base \cdot \log \left(-re\right)}{\log base \cdot \log base}\\
\mathbf{elif}\;im \le -4.255621728546282 \cdot 10^{-81}:\\
\;\;\;\;\frac{\log \left(re \cdot re + im \cdot im\right)}{\log base} \cdot \frac{1}{2}\\
\mathbf{elif}\;im \le 4.658599113247346 \cdot 10^{-108}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\
\mathbf{elif}\;im \le 4.4001354047048697 \cdot 10^{+102}:\\
\;\;\;\;\frac{\log \left(re \cdot re + im \cdot im\right)}{\log base} \cdot \frac{1}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log im}{\log base}\\
\end{array}double f(double re, double im, double base) {
double r1087240 = re;
double r1087241 = r1087240 * r1087240;
double r1087242 = im;
double r1087243 = r1087242 * r1087242;
double r1087244 = r1087241 + r1087243;
double r1087245 = sqrt(r1087244);
double r1087246 = log(r1087245);
double r1087247 = base;
double r1087248 = log(r1087247);
double r1087249 = r1087246 * r1087248;
double r1087250 = atan2(r1087242, r1087240);
double r1087251 = 0.0;
double r1087252 = r1087250 * r1087251;
double r1087253 = r1087249 + r1087252;
double r1087254 = r1087248 * r1087248;
double r1087255 = r1087251 * r1087251;
double r1087256 = r1087254 + r1087255;
double r1087257 = r1087253 / r1087256;
return r1087257;
}
double f(double re, double im, double base) {
double r1087258 = im;
double r1087259 = -3.247335420066394e+143;
bool r1087260 = r1087258 <= r1087259;
double r1087261 = base;
double r1087262 = log(r1087261);
double r1087263 = re;
double r1087264 = -r1087263;
double r1087265 = log(r1087264);
double r1087266 = r1087262 * r1087265;
double r1087267 = r1087262 * r1087262;
double r1087268 = r1087266 / r1087267;
double r1087269 = -4.255621728546282e-81;
bool r1087270 = r1087258 <= r1087269;
double r1087271 = r1087263 * r1087263;
double r1087272 = r1087258 * r1087258;
double r1087273 = r1087271 + r1087272;
double r1087274 = log(r1087273);
double r1087275 = r1087274 / r1087262;
double r1087276 = 0.5;
double r1087277 = r1087275 * r1087276;
double r1087278 = 4.658599113247346e-108;
bool r1087279 = r1087258 <= r1087278;
double r1087280 = r1087265 / r1087262;
double r1087281 = 4.4001354047048697e+102;
bool r1087282 = r1087258 <= r1087281;
double r1087283 = log(r1087258);
double r1087284 = r1087283 / r1087262;
double r1087285 = r1087282 ? r1087277 : r1087284;
double r1087286 = r1087279 ? r1087280 : r1087285;
double r1087287 = r1087270 ? r1087277 : r1087286;
double r1087288 = r1087260 ? r1087268 : r1087287;
return r1087288;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if im < -3.247335420066394e+143Initial program 59.6
Simplified59.6
Taylor expanded around -inf 51.4
Simplified51.4
if -3.247335420066394e+143 < im < -4.255621728546282e-81 or 4.658599113247346e-108 < im < 4.4001354047048697e+102Initial program 14.9
Simplified14.9
rmApplied associate-/l*14.8
Simplified14.8
rmApplied div-inv14.8
Applied pow1/214.8
Applied log-pow14.8
Applied times-frac14.9
Simplified14.9
rmApplied div-inv14.9
Applied associate-*l*14.9
Simplified14.8
if -4.255621728546282e-81 < im < 4.658599113247346e-108Initial program 25.3
Simplified25.3
rmApplied associate-/l*25.3
Simplified25.3
Taylor expanded around -inf 8.8
Simplified8.8
if 4.4001354047048697e+102 < im Initial program 51.0
Simplified51.0
rmApplied associate-/l*51.0
Simplified51.0
Taylor expanded around 0 9.4
Final simplification16.6
herbie shell --seed 2019134
(FPCore (re im base)
:name "math.log/2 on complex, real part"
(/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0)) (+ (* (log base) (log base)) (* 0 0))))