\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{1}{\log base} \cdot \log \left(\left(\sqrt{\sqrt{\mathsf{hypot}\left(re, im\right)}} \cdot \sqrt{\sqrt{\mathsf{hypot}\left(re, im\right)}}\right) \cdot \left(\sqrt{\sqrt{\mathsf{hypot}\left(re, im\right)}} \cdot \sqrt{\sqrt{\mathsf{hypot}\left(re, im\right)}}\right)\right)double f(double re, double im, double base) {
double r1486155 = re;
double r1486156 = r1486155 * r1486155;
double r1486157 = im;
double r1486158 = r1486157 * r1486157;
double r1486159 = r1486156 + r1486158;
double r1486160 = sqrt(r1486159);
double r1486161 = log(r1486160);
double r1486162 = base;
double r1486163 = log(r1486162);
double r1486164 = r1486161 * r1486163;
double r1486165 = atan2(r1486157, r1486155);
double r1486166 = 0.0;
double r1486167 = r1486165 * r1486166;
double r1486168 = r1486164 + r1486167;
double r1486169 = r1486163 * r1486163;
double r1486170 = r1486166 * r1486166;
double r1486171 = r1486169 + r1486170;
double r1486172 = r1486168 / r1486171;
return r1486172;
}
double f(double re, double im, double base) {
double r1486173 = 1.0;
double r1486174 = base;
double r1486175 = log(r1486174);
double r1486176 = r1486173 / r1486175;
double r1486177 = re;
double r1486178 = im;
double r1486179 = hypot(r1486177, r1486178);
double r1486180 = sqrt(r1486179);
double r1486181 = sqrt(r1486180);
double r1486182 = r1486181 * r1486181;
double r1486183 = r1486182 * r1486182;
double r1486184 = log(r1486183);
double r1486185 = r1486176 * r1486184;
return r1486185;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
Initial program 30.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
rmApplied add-sqr-sqrt0.4
Applied sqrt-prod0.4
Applied add-sqr-sqrt0.4
Applied sqrt-prod0.4
Applied swap-sqr0.4
rmApplied div-inv0.4
Final simplification0.4
herbie shell --seed 2019158 +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))))