\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{\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 \mathsf{hypot}\left(\log base, 0.0\right)}double f(double re, double im, double base) {
double r50887 = re;
double r50888 = r50887 * r50887;
double r50889 = im;
double r50890 = r50889 * r50889;
double r50891 = r50888 + r50890;
double r50892 = sqrt(r50891);
double r50893 = log(r50892);
double r50894 = base;
double r50895 = log(r50894);
double r50896 = r50893 * r50895;
double r50897 = atan2(r50889, r50887);
double r50898 = 0.0;
double r50899 = r50897 * r50898;
double r50900 = r50896 + r50899;
double r50901 = r50895 * r50895;
double r50902 = r50898 * r50898;
double r50903 = r50901 + r50902;
double r50904 = r50900 / r50903;
return r50904;
}
double f(double re, double im, double base) {
double r50905 = base;
double r50906 = log(r50905);
double r50907 = re;
double r50908 = im;
double r50909 = hypot(r50907, r50908);
double r50910 = log(r50909);
double r50911 = atan2(r50908, r50907);
double r50912 = 0.0;
double r50913 = r50911 * r50912;
double r50914 = fma(r50906, r50910, r50913);
double r50915 = hypot(r50906, r50912);
double r50916 = r50915 * r50915;
double r50917 = r50914 / r50916;
return r50917;
}



Bits error versus re



Bits error versus im



Bits error versus base
Initial program 31.8
rmApplied add-exp-log31.8
Simplified0.5
rmApplied add-sqr-sqrt0.5
Applied associate-/r*0.4
Simplified0.4
rmApplied div-inv0.5
Simplified0.5
rmApplied frac-times0.5
Simplified0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020056 +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))))