\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 r47075 = re;
double r47076 = r47075 * r47075;
double r47077 = im;
double r47078 = r47077 * r47077;
double r47079 = r47076 + r47078;
double r47080 = sqrt(r47079);
double r47081 = log(r47080);
double r47082 = base;
double r47083 = log(r47082);
double r47084 = r47081 * r47083;
double r47085 = atan2(r47077, r47075);
double r47086 = 0.0;
double r47087 = r47085 * r47086;
double r47088 = r47084 + r47087;
double r47089 = r47083 * r47083;
double r47090 = r47086 * r47086;
double r47091 = r47089 + r47090;
double r47092 = r47088 / r47091;
return r47092;
}
double f(double re, double im, double base) {
double r47093 = base;
double r47094 = log(r47093);
double r47095 = re;
double r47096 = im;
double r47097 = hypot(r47095, r47096);
double r47098 = log(r47097);
double r47099 = atan2(r47096, r47095);
double r47100 = 0.0;
double r47101 = r47099 * r47100;
double r47102 = fma(r47094, r47098, r47101);
double r47103 = hypot(r47094, r47100);
double r47104 = 1.0;
double r47105 = r47103 * r47104;
double r47106 = r47102 / r47105;
double r47107 = r47094 * r47094;
double r47108 = r47100 * r47100;
double r47109 = r47107 + r47108;
double r47110 = sqrt(r47109);
double r47111 = r47106 / r47110;
return r47111;
}



Bits error versus re



Bits error versus im



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