\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{1}{\frac{1}{\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)}}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}double f(double re, double im, double base) {
double r46248 = re;
double r46249 = r46248 * r46248;
double r46250 = im;
double r46251 = r46250 * r46250;
double r46252 = r46249 + r46251;
double r46253 = sqrt(r46252);
double r46254 = log(r46253);
double r46255 = base;
double r46256 = log(r46255);
double r46257 = r46254 * r46256;
double r46258 = atan2(r46250, r46248);
double r46259 = 0.0;
double r46260 = r46258 * r46259;
double r46261 = r46257 + r46260;
double r46262 = r46256 * r46256;
double r46263 = r46259 * r46259;
double r46264 = r46262 + r46263;
double r46265 = r46261 / r46264;
return r46265;
}
double f(double re, double im, double base) {
double r46266 = 1.0;
double r46267 = re;
double r46268 = im;
double r46269 = hypot(r46267, r46268);
double r46270 = log(r46269);
double r46271 = base;
double r46272 = log(r46271);
double r46273 = atan2(r46268, r46267);
double r46274 = 0.0;
double r46275 = r46273 * r46274;
double r46276 = fma(r46270, r46272, r46275);
double r46277 = hypot(r46272, r46274);
double r46278 = r46276 / r46277;
double r46279 = r46266 / r46278;
double r46280 = r46266 / r46279;
double r46281 = r46272 * r46272;
double r46282 = r46274 * r46274;
double r46283 = r46281 + r46282;
double r46284 = sqrt(r46283);
double r46285 = r46280 / r46284;
return r46285;
}



Bits error versus re



Bits error versus im



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