\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 r61410 = re;
double r61411 = r61410 * r61410;
double r61412 = im;
double r61413 = r61412 * r61412;
double r61414 = r61411 + r61413;
double r61415 = sqrt(r61414);
double r61416 = log(r61415);
double r61417 = base;
double r61418 = log(r61417);
double r61419 = r61416 * r61418;
double r61420 = atan2(r61412, r61410);
double r61421 = 0.0;
double r61422 = r61420 * r61421;
double r61423 = r61419 + r61422;
double r61424 = r61418 * r61418;
double r61425 = r61421 * r61421;
double r61426 = r61424 + r61425;
double r61427 = r61423 / r61426;
return r61427;
}
double f(double re, double im, double base) {
double r61428 = re;
double r61429 = im;
double r61430 = hypot(r61428, r61429);
double r61431 = log(r61430);
double r61432 = base;
double r61433 = log(r61432);
double r61434 = atan2(r61429, r61428);
double r61435 = 0.0;
double r61436 = r61434 * r61435;
double r61437 = fma(r61431, r61433, r61436);
double r61438 = hypot(r61433, r61435);
double r61439 = r61437 / r61438;
double r61440 = r61435 * r61435;
double r61441 = fma(r61433, r61433, r61440);
double r61442 = sqrt(r61441);
double r61443 = r61439 / r61442;
return r61443;
}



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))))