\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{\sqrt[3]{{\left(\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)}\right)}^{3}}}{\sqrt{\mathsf{fma}\left(\log base, \log base, 0.0 \cdot 0.0\right)}}double f(double re, double im, double base) {
double r43878 = re;
double r43879 = r43878 * r43878;
double r43880 = im;
double r43881 = r43880 * r43880;
double r43882 = r43879 + r43881;
double r43883 = sqrt(r43882);
double r43884 = log(r43883);
double r43885 = base;
double r43886 = log(r43885);
double r43887 = r43884 * r43886;
double r43888 = atan2(r43880, r43878);
double r43889 = 0.0;
double r43890 = r43888 * r43889;
double r43891 = r43887 + r43890;
double r43892 = r43886 * r43886;
double r43893 = r43889 * r43889;
double r43894 = r43892 + r43893;
double r43895 = r43891 / r43894;
return r43895;
}
double f(double re, double im, double base) {
double r43896 = re;
double r43897 = im;
double r43898 = hypot(r43896, r43897);
double r43899 = log(r43898);
double r43900 = base;
double r43901 = log(r43900);
double r43902 = atan2(r43897, r43896);
double r43903 = 0.0;
double r43904 = r43902 * r43903;
double r43905 = fma(r43899, r43901, r43904);
double r43906 = hypot(r43901, r43903);
double r43907 = r43905 / r43906;
double r43908 = 3.0;
double r43909 = pow(r43907, r43908);
double r43910 = cbrt(r43909);
double r43911 = r43903 * r43903;
double r43912 = fma(r43901, r43901, r43911);
double r43913 = sqrt(r43912);
double r43914 = r43910 / r43913;
return r43914;
}



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
rmApplied add-cbrt-cube0.7
Applied add-cbrt-cube0.8
Applied cbrt-undiv0.7
Simplified0.6
Final simplification0.6
herbie shell --seed 2019212 +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))))