\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 -5.1187602451003614 \cdot 10^{+126}:\\
\;\;\;\;\frac{1}{\log base} \cdot \log \left(-re\right)\\
\mathbf{elif}\;im \le -1.4887735722677587 \cdot 10^{-107}:\\
\;\;\;\;\frac{1}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\
\mathbf{elif}\;im \le 5.8639778196245494 \cdot 10^{-64}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\
\mathbf{elif}\;im \le 2.2773753066549283 \cdot 10^{+101}:\\
\;\;\;\;\frac{1}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log im}{\log base}\\
\end{array}double f(double re, double im, double base) {
double r2154336 = re;
double r2154337 = r2154336 * r2154336;
double r2154338 = im;
double r2154339 = r2154338 * r2154338;
double r2154340 = r2154337 + r2154339;
double r2154341 = sqrt(r2154340);
double r2154342 = log(r2154341);
double r2154343 = base;
double r2154344 = log(r2154343);
double r2154345 = r2154342 * r2154344;
double r2154346 = atan2(r2154338, r2154336);
double r2154347 = 0.0;
double r2154348 = r2154346 * r2154347;
double r2154349 = r2154345 + r2154348;
double r2154350 = r2154344 * r2154344;
double r2154351 = r2154347 * r2154347;
double r2154352 = r2154350 + r2154351;
double r2154353 = r2154349 / r2154352;
return r2154353;
}
double f(double re, double im, double base) {
double r2154354 = im;
double r2154355 = -5.1187602451003614e+126;
bool r2154356 = r2154354 <= r2154355;
double r2154357 = 1.0;
double r2154358 = base;
double r2154359 = log(r2154358);
double r2154360 = r2154357 / r2154359;
double r2154361 = re;
double r2154362 = -r2154361;
double r2154363 = log(r2154362);
double r2154364 = r2154360 * r2154363;
double r2154365 = -1.4887735722677587e-107;
bool r2154366 = r2154354 <= r2154365;
double r2154367 = r2154361 * r2154361;
double r2154368 = r2154354 * r2154354;
double r2154369 = r2154367 + r2154368;
double r2154370 = sqrt(r2154369);
double r2154371 = log(r2154370);
double r2154372 = r2154359 / r2154371;
double r2154373 = r2154357 / r2154372;
double r2154374 = 5.8639778196245494e-64;
bool r2154375 = r2154354 <= r2154374;
double r2154376 = r2154363 / r2154359;
double r2154377 = 2.2773753066549283e+101;
bool r2154378 = r2154354 <= r2154377;
double r2154379 = log(r2154354);
double r2154380 = r2154379 / r2154359;
double r2154381 = r2154378 ? r2154373 : r2154380;
double r2154382 = r2154375 ? r2154376 : r2154381;
double r2154383 = r2154366 ? r2154373 : r2154382;
double r2154384 = r2154356 ? r2154364 : r2154383;
return r2154384;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if im < -5.1187602451003614e+126Initial program 55.8
Simplified55.8
Taylor expanded around -inf 50.6
Simplified50.6
rmApplied div-inv50.6
rmApplied associate-*l*50.6
Simplified50.6
if -5.1187602451003614e+126 < im < -1.4887735722677587e-107 or 5.8639778196245494e-64 < im < 2.2773753066549283e+101Initial program 16.4
Simplified16.4
rmApplied clear-num16.5
Simplified16.4
if -1.4887735722677587e-107 < im < 5.8639778196245494e-64Initial program 25.3
Simplified25.3
Taylor expanded around -inf 8.9
Simplified8.9
rmApplied associate-/r*8.8
Simplified8.8
if 2.2773753066549283e+101 < im Initial program 50.9
Simplified50.9
Taylor expanded around 0 9.3
Final simplification17.5
herbie shell --seed 2019130
(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))))