\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{\log \left(\mathsf{hypot}\left(re, im\right)\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\left(\log base \cdot \left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) + \log base \cdot \log \left(\sqrt[3]{base}\right)\right) + 0.0 \cdot 0.0}double f(double re, double im, double base) {
double r49978 = re;
double r49979 = r49978 * r49978;
double r49980 = im;
double r49981 = r49980 * r49980;
double r49982 = r49979 + r49981;
double r49983 = sqrt(r49982);
double r49984 = log(r49983);
double r49985 = base;
double r49986 = log(r49985);
double r49987 = r49984 * r49986;
double r49988 = atan2(r49980, r49978);
double r49989 = 0.0;
double r49990 = r49988 * r49989;
double r49991 = r49987 + r49990;
double r49992 = r49986 * r49986;
double r49993 = r49989 * r49989;
double r49994 = r49992 + r49993;
double r49995 = r49991 / r49994;
return r49995;
}
double f(double re, double im, double base) {
double r49996 = re;
double r49997 = im;
double r49998 = hypot(r49996, r49997);
double r49999 = log(r49998);
double r50000 = base;
double r50001 = log(r50000);
double r50002 = r49999 * r50001;
double r50003 = atan2(r49997, r49996);
double r50004 = 0.0;
double r50005 = r50003 * r50004;
double r50006 = r50002 + r50005;
double r50007 = 2.0;
double r50008 = cbrt(r50000);
double r50009 = log(r50008);
double r50010 = r50007 * r50009;
double r50011 = r50001 * r50010;
double r50012 = r50001 * r50009;
double r50013 = r50011 + r50012;
double r50014 = r50004 * r50004;
double r50015 = r50013 + r50014;
double r50016 = r50006 / r50015;
return r50016;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
Initial program 32.0
rmApplied hypot-def0.5
rmApplied add-cube-cbrt0.5
Applied log-prod0.5
Applied distribute-lft-in0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020047 +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))))