\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\frac{\log \left((e^{\log_* (1 + \sqrt[3]{\sqrt{re^2 + im^2}^*})} - 1)^* \cdot \left(\sqrt[3]{\sqrt{re^2 + im^2}^*} \cdot \sqrt[3]{\sqrt{re^2 + im^2}^*}\right)\right)}{\log base}double f(double re, double im, double base) {
double r868973 = re;
double r868974 = r868973 * r868973;
double r868975 = im;
double r868976 = r868975 * r868975;
double r868977 = r868974 + r868976;
double r868978 = sqrt(r868977);
double r868979 = log(r868978);
double r868980 = base;
double r868981 = log(r868980);
double r868982 = r868979 * r868981;
double r868983 = atan2(r868975, r868973);
double r868984 = 0.0;
double r868985 = r868983 * r868984;
double r868986 = r868982 + r868985;
double r868987 = r868981 * r868981;
double r868988 = r868984 * r868984;
double r868989 = r868987 + r868988;
double r868990 = r868986 / r868989;
return r868990;
}
double f(double re, double im, double base) {
double r868991 = re;
double r868992 = im;
double r868993 = hypot(r868991, r868992);
double r868994 = cbrt(r868993);
double r868995 = log1p(r868994);
double r868996 = expm1(r868995);
double r868997 = r868994 * r868994;
double r868998 = r868996 * r868997;
double r868999 = log(r868998);
double r869000 = base;
double r869001 = log(r869000);
double r869002 = r868999 / r869001;
return r869002;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
Initial program 30.6
Simplified0.4
rmApplied add-sqr-sqrt0.4
rmApplied add-cube-cbrt0.4
Applied sqrt-prod0.4
Applied add-cube-cbrt0.4
Applied sqrt-prod0.4
Applied swap-sqr0.4
Simplified0.4
Simplified0.4
rmApplied expm1-log1p-u0.4
Final simplification0.4
herbie shell --seed 2019112 +o rules:numerics
(FPCore (re im base)
:name "math.log/2 on complex, real part"
(/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0)) (+ (* (log base) (log base)) (* 0 0))))