\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(0.0, 0.0, \log base \cdot \log base\right)}}double f(double re, double im, double base) {
double r38446 = re;
double r38447 = r38446 * r38446;
double r38448 = im;
double r38449 = r38448 * r38448;
double r38450 = r38447 + r38449;
double r38451 = sqrt(r38450);
double r38452 = log(r38451);
double r38453 = base;
double r38454 = log(r38453);
double r38455 = r38452 * r38454;
double r38456 = atan2(r38448, r38446);
double r38457 = 0.0;
double r38458 = r38456 * r38457;
double r38459 = r38455 + r38458;
double r38460 = r38454 * r38454;
double r38461 = r38457 * r38457;
double r38462 = r38460 + r38461;
double r38463 = r38459 / r38462;
return r38463;
}
double f(double re, double im, double base) {
double r38464 = re;
double r38465 = im;
double r38466 = hypot(r38464, r38465);
double r38467 = log(r38466);
double r38468 = base;
double r38469 = log(r38468);
double r38470 = atan2(r38465, r38464);
double r38471 = 0.0;
double r38472 = r38470 * r38471;
double r38473 = fma(r38467, r38469, r38472);
double r38474 = hypot(r38469, r38471);
double r38475 = r38473 / r38474;
double r38476 = r38469 * r38469;
double r38477 = fma(r38471, r38471, r38476);
double r38478 = sqrt(r38477);
double r38479 = r38475 / r38478;
return r38479;
}



Bits error versus re



Bits error versus im



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