\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{\frac{\log \left(\mathsf{hypot}\left(re, im\right)\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\mathsf{hypot}\left(\log base, 0.0\right) \cdot 1}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}double f(double re, double im, double base) {
double r43473 = re;
double r43474 = r43473 * r43473;
double r43475 = im;
double r43476 = r43475 * r43475;
double r43477 = r43474 + r43476;
double r43478 = sqrt(r43477);
double r43479 = log(r43478);
double r43480 = base;
double r43481 = log(r43480);
double r43482 = r43479 * r43481;
double r43483 = atan2(r43475, r43473);
double r43484 = 0.0;
double r43485 = r43483 * r43484;
double r43486 = r43482 + r43485;
double r43487 = r43481 * r43481;
double r43488 = r43484 * r43484;
double r43489 = r43487 + r43488;
double r43490 = r43486 / r43489;
return r43490;
}
double f(double re, double im, double base) {
double r43491 = re;
double r43492 = im;
double r43493 = hypot(r43491, r43492);
double r43494 = log(r43493);
double r43495 = base;
double r43496 = log(r43495);
double r43497 = r43494 * r43496;
double r43498 = atan2(r43492, r43491);
double r43499 = 0.0;
double r43500 = r43498 * r43499;
double r43501 = r43497 + r43500;
double r43502 = hypot(r43496, r43499);
double r43503 = 1.0;
double r43504 = r43502 * r43503;
double r43505 = r43501 / r43504;
double r43506 = r43496 * r43496;
double r43507 = r43499 * r43499;
double r43508 = r43506 + r43507;
double r43509 = sqrt(r43508);
double r43510 = r43505 / r43509;
return r43510;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
Initial program 32.6
rmApplied hypot-def0.5
rmApplied add-sqr-sqrt0.5
Applied associate-/r*0.4
Simplified0.4
rmApplied fma-udef0.4
Final simplification0.4
herbie shell --seed 2020083 +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))))