\frac{\tan^{-1}_* \frac{im}{re} \cdot \log base - \log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\frac{\tan^{-1}_* \frac{im}{re} \cdot \log base - \log \left(1 \cdot \mathsf{hypot}\left(re, im\right)\right) \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}double f(double re, double im, double base) {
double r54641 = im;
double r54642 = re;
double r54643 = atan2(r54641, r54642);
double r54644 = base;
double r54645 = log(r54644);
double r54646 = r54643 * r54645;
double r54647 = r54642 * r54642;
double r54648 = r54641 * r54641;
double r54649 = r54647 + r54648;
double r54650 = sqrt(r54649);
double r54651 = log(r54650);
double r54652 = 0.0;
double r54653 = r54651 * r54652;
double r54654 = r54646 - r54653;
double r54655 = r54645 * r54645;
double r54656 = r54652 * r54652;
double r54657 = r54655 + r54656;
double r54658 = r54654 / r54657;
return r54658;
}
double f(double re, double im, double base) {
double r54659 = im;
double r54660 = re;
double r54661 = atan2(r54659, r54660);
double r54662 = base;
double r54663 = log(r54662);
double r54664 = r54661 * r54663;
double r54665 = 1.0;
double r54666 = hypot(r54660, r54659);
double r54667 = r54665 * r54666;
double r54668 = log(r54667);
double r54669 = 0.0;
double r54670 = r54668 * r54669;
double r54671 = r54664 - r54670;
double r54672 = r54663 * r54663;
double r54673 = r54669 * r54669;
double r54674 = r54672 + r54673;
double r54675 = r54671 / r54674;
return r54675;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
Initial program 32.0
rmApplied *-un-lft-identity32.0
Applied sqrt-prod32.0
Simplified32.0
Simplified0.4
Final simplification0.4
herbie shell --seed 2020062 +o rules:numerics
(FPCore (re im base)
:name "math.log/2 on complex, imaginary part"
:precision binary64
(/ (- (* (atan2 im re) (log base)) (* (log (sqrt (+ (* re re) (* im im)))) 0.0)) (+ (* (log base) (log base)) (* 0.0 0.0))))