\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{\mathsf{fma}\left(\log base, \log \left(\mathsf{hypot}\left(re, im\right)\right), \tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}{\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 r50250 = re;
double r50251 = r50250 * r50250;
double r50252 = im;
double r50253 = r50252 * r50252;
double r50254 = r50251 + r50253;
double r50255 = sqrt(r50254);
double r50256 = log(r50255);
double r50257 = base;
double r50258 = log(r50257);
double r50259 = r50256 * r50258;
double r50260 = atan2(r50252, r50250);
double r50261 = 0.0;
double r50262 = r50260 * r50261;
double r50263 = r50259 + r50262;
double r50264 = r50258 * r50258;
double r50265 = r50261 * r50261;
double r50266 = r50264 + r50265;
double r50267 = r50263 / r50266;
return r50267;
}
double f(double re, double im, double base) {
double r50268 = base;
double r50269 = log(r50268);
double r50270 = re;
double r50271 = im;
double r50272 = hypot(r50270, r50271);
double r50273 = log(r50272);
double r50274 = atan2(r50271, r50270);
double r50275 = 0.0;
double r50276 = r50274 * r50275;
double r50277 = fma(r50269, r50273, r50276);
double r50278 = hypot(r50269, r50275);
double r50279 = 1.0;
double r50280 = r50278 * r50279;
double r50281 = r50277 / r50280;
double r50282 = r50269 * r50269;
double r50283 = r50275 * r50275;
double r50284 = r50282 + r50283;
double r50285 = sqrt(r50284);
double r50286 = r50281 / r50285;
return r50286;
}



Bits error versus re



Bits error versus im



Bits error versus base
Initial program 32.1
rmApplied *-un-lft-identity32.1
Applied sqrt-prod32.1
Simplified32.1
Simplified0.5
rmApplied add-sqr-sqrt0.5
Applied associate-/r*0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020089 +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))))