\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{1}{\frac{\log base \cdot \log base + 0.0 \cdot 0.0}{\log \left(1 \cdot \mathsf{hypot}\left(re, im\right)\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}double f(double re, double im, double base) {
double r45572 = re;
double r45573 = r45572 * r45572;
double r45574 = im;
double r45575 = r45574 * r45574;
double r45576 = r45573 + r45575;
double r45577 = sqrt(r45576);
double r45578 = log(r45577);
double r45579 = base;
double r45580 = log(r45579);
double r45581 = r45578 * r45580;
double r45582 = atan2(r45574, r45572);
double r45583 = 0.0;
double r45584 = r45582 * r45583;
double r45585 = r45581 + r45584;
double r45586 = r45580 * r45580;
double r45587 = r45583 * r45583;
double r45588 = r45586 + r45587;
double r45589 = r45585 / r45588;
return r45589;
}
double f(double re, double im, double base) {
double r45590 = 1.0;
double r45591 = base;
double r45592 = log(r45591);
double r45593 = r45592 * r45592;
double r45594 = 0.0;
double r45595 = r45594 * r45594;
double r45596 = r45593 + r45595;
double r45597 = re;
double r45598 = im;
double r45599 = hypot(r45597, r45598);
double r45600 = r45590 * r45599;
double r45601 = log(r45600);
double r45602 = r45601 * r45592;
double r45603 = atan2(r45598, r45597);
double r45604 = r45603 * r45594;
double r45605 = r45602 + r45604;
double r45606 = r45596 / r45605;
double r45607 = r45590 / r45606;
return r45607;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
Initial program 31.9
rmApplied *-un-lft-identity31.9
Applied sqrt-prod31.9
Simplified31.9
Simplified0.5
rmApplied clear-num0.5
Final simplification0.5
herbie shell --seed 2019346 +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))))