\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\frac{\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(re, im\right)\right), \log base, \tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}{\mathsf{hypot}\left(\log base, 0.0\right)} \cdot \frac{1}{\mathsf{hypot}\left(\log base, 0.0\right)}double f(double re, double im, double base) {
double r53383 = re;
double r53384 = r53383 * r53383;
double r53385 = im;
double r53386 = r53385 * r53385;
double r53387 = r53384 + r53386;
double r53388 = sqrt(r53387);
double r53389 = log(r53388);
double r53390 = base;
double r53391 = log(r53390);
double r53392 = r53389 * r53391;
double r53393 = atan2(r53385, r53383);
double r53394 = 0.0;
double r53395 = r53393 * r53394;
double r53396 = r53392 + r53395;
double r53397 = r53391 * r53391;
double r53398 = r53394 * r53394;
double r53399 = r53397 + r53398;
double r53400 = r53396 / r53399;
return r53400;
}
double f(double re, double im, double base) {
double r53401 = re;
double r53402 = im;
double r53403 = hypot(r53401, r53402);
double r53404 = log(r53403);
double r53405 = base;
double r53406 = log(r53405);
double r53407 = atan2(r53402, r53401);
double r53408 = 0.0;
double r53409 = r53407 * r53408;
double r53410 = fma(r53404, r53406, r53409);
double r53411 = hypot(r53406, r53408);
double r53412 = r53410 / r53411;
double r53413 = 1.0;
double r53414 = r53413 / r53411;
double r53415 = r53412 * r53414;
return r53415;
}



Bits error versus re



Bits error versus im



Bits error versus base
Initial program 32.2
Simplified0.5
rmApplied add-sqr-sqrt0.5
Applied associate-/r*0.4
Simplified0.4
rmApplied div-inv0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020043 +o rules:numerics
(FPCore (re im base)
:name "math.log/2 on complex, real part"
:precision binary64
(/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0.0)) (+ (* (log base) (log base)) (* 0.0 0.0))))