\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 \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{\mathsf{fma}\left(\log base, \log base, 0.0 \cdot 0.0\right)}}double f(double re, double im, double base) {
double r43444 = re;
double r43445 = r43444 * r43444;
double r43446 = im;
double r43447 = r43446 * r43446;
double r43448 = r43445 + r43447;
double r43449 = sqrt(r43448);
double r43450 = log(r43449);
double r43451 = base;
double r43452 = log(r43451);
double r43453 = r43450 * r43452;
double r43454 = atan2(r43446, r43444);
double r43455 = 0.0;
double r43456 = r43454 * r43455;
double r43457 = r43453 + r43456;
double r43458 = r43452 * r43452;
double r43459 = r43455 * r43455;
double r43460 = r43458 + r43459;
double r43461 = r43457 / r43460;
return r43461;
}
double f(double re, double im, double base) {
double r43462 = re;
double r43463 = im;
double r43464 = hypot(r43462, r43463);
double r43465 = log(r43464);
double r43466 = base;
double r43467 = log(r43466);
double r43468 = atan2(r43463, r43462);
double r43469 = 0.0;
double r43470 = r43468 * r43469;
double r43471 = fma(r43465, r43467, r43470);
double r43472 = hypot(r43467, r43469);
double r43473 = r43471 / r43472;
double r43474 = r43469 * r43469;
double r43475 = fma(r43467, r43467, r43474);
double r43476 = sqrt(r43475);
double r43477 = r43473 / r43476;
return r43477;
}



Bits error versus re



Bits error versus im



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