\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{\frac{\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(re, im\right)\right), \log base, \tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}{\mathsf{hypot}\left(\log base, 0.0\right)}}{\sqrt{\mathsf{fma}\left(\log base, \log base, 0.0 \cdot 0.0\right)}}double f(double re, double im, double base) {
double r55636 = re;
double r55637 = r55636 * r55636;
double r55638 = im;
double r55639 = r55638 * r55638;
double r55640 = r55637 + r55639;
double r55641 = sqrt(r55640);
double r55642 = log(r55641);
double r55643 = base;
double r55644 = log(r55643);
double r55645 = r55642 * r55644;
double r55646 = atan2(r55638, r55636);
double r55647 = 0.0;
double r55648 = r55646 * r55647;
double r55649 = r55645 + r55648;
double r55650 = r55644 * r55644;
double r55651 = r55647 * r55647;
double r55652 = r55650 + r55651;
double r55653 = r55649 / r55652;
return r55653;
}
double f(double re, double im, double base) {
double r55654 = re;
double r55655 = im;
double r55656 = hypot(r55654, r55655);
double r55657 = log(r55656);
double r55658 = base;
double r55659 = log(r55658);
double r55660 = atan2(r55655, r55654);
double r55661 = 0.0;
double r55662 = r55660 * r55661;
double r55663 = fma(r55657, r55659, r55662);
double r55664 = hypot(r55659, r55661);
double r55665 = r55663 / r55664;
double r55666 = r55661 * r55661;
double r55667 = fma(r55659, r55659, r55666);
double r55668 = sqrt(r55667);
double r55669 = r55665 / r55668;
return r55669;
}



Bits error versus re



Bits error versus im



Bits error versus base
Initial program 31.9
Simplified0.5
rmApplied add-sqr-sqrt0.5
Applied associate-/r*0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020046 +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))))