\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{1 \cdot \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 r48056 = re;
double r48057 = r48056 * r48056;
double r48058 = im;
double r48059 = r48058 * r48058;
double r48060 = r48057 + r48059;
double r48061 = sqrt(r48060);
double r48062 = log(r48061);
double r48063 = base;
double r48064 = log(r48063);
double r48065 = r48062 * r48064;
double r48066 = atan2(r48058, r48056);
double r48067 = 0.0;
double r48068 = r48066 * r48067;
double r48069 = r48065 + r48068;
double r48070 = r48064 * r48064;
double r48071 = r48067 * r48067;
double r48072 = r48070 + r48071;
double r48073 = r48069 / r48072;
return r48073;
}
double f(double re, double im, double base) {
double r48074 = 1.0;
double r48075 = base;
double r48076 = log(r48075);
double r48077 = re;
double r48078 = im;
double r48079 = hypot(r48077, r48078);
double r48080 = log(r48079);
double r48081 = atan2(r48078, r48077);
double r48082 = 0.0;
double r48083 = r48081 * r48082;
double r48084 = fma(r48076, r48080, r48083);
double r48085 = hypot(r48076, r48082);
double r48086 = r48085 * r48074;
double r48087 = r48084 / r48086;
double r48088 = r48074 * r48087;
double r48089 = r48076 * r48076;
double r48090 = r48082 * r48082;
double r48091 = r48089 + r48090;
double r48092 = sqrt(r48091);
double r48093 = r48088 / r48092;
return r48093;
}



Bits error versus re



Bits error versus im



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