\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(0.0, \log base\right)}}{\sqrt{\mathsf{fma}\left(\log base, \log base, 0.0 \cdot 0.0\right)}}double f(double re, double im, double base) {
double r49943 = re;
double r49944 = r49943 * r49943;
double r49945 = im;
double r49946 = r49945 * r49945;
double r49947 = r49944 + r49946;
double r49948 = sqrt(r49947);
double r49949 = log(r49948);
double r49950 = base;
double r49951 = log(r49950);
double r49952 = r49949 * r49951;
double r49953 = atan2(r49945, r49943);
double r49954 = 0.0;
double r49955 = r49953 * r49954;
double r49956 = r49952 + r49955;
double r49957 = r49951 * r49951;
double r49958 = r49954 * r49954;
double r49959 = r49957 + r49958;
double r49960 = r49956 / r49959;
return r49960;
}
double f(double re, double im, double base) {
double r49961 = re;
double r49962 = im;
double r49963 = hypot(r49961, r49962);
double r49964 = log(r49963);
double r49965 = base;
double r49966 = log(r49965);
double r49967 = atan2(r49962, r49961);
double r49968 = 0.0;
double r49969 = r49967 * r49968;
double r49970 = fma(r49964, r49966, r49969);
double r49971 = hypot(r49968, r49966);
double r49972 = r49970 / r49971;
double r49973 = r49968 * r49968;
double r49974 = fma(r49966, r49966, r49973);
double r49975 = sqrt(r49974);
double r49976 = r49972 / r49975;
return r49976;
}



Bits error versus re



Bits error versus im



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