\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 base, \log \left(\mathsf{hypot}\left(re, im\right)\right), 0.0 \cdot \tan^{-1}_* \frac{im}{re}\right)}{\sqrt{\mathsf{fma}\left(0.0, 0.0, \log base \cdot \log base\right)}}}{\sqrt{\mathsf{fma}\left(0.0, 0.0, \log base \cdot \log base\right)}}double f(double re, double im, double base) {
double r2275552 = re;
double r2275553 = r2275552 * r2275552;
double r2275554 = im;
double r2275555 = r2275554 * r2275554;
double r2275556 = r2275553 + r2275555;
double r2275557 = sqrt(r2275556);
double r2275558 = log(r2275557);
double r2275559 = base;
double r2275560 = log(r2275559);
double r2275561 = r2275558 * r2275560;
double r2275562 = atan2(r2275554, r2275552);
double r2275563 = 0.0;
double r2275564 = r2275562 * r2275563;
double r2275565 = r2275561 + r2275564;
double r2275566 = r2275560 * r2275560;
double r2275567 = r2275563 * r2275563;
double r2275568 = r2275566 + r2275567;
double r2275569 = r2275565 / r2275568;
return r2275569;
}
double f(double re, double im, double base) {
double r2275570 = base;
double r2275571 = log(r2275570);
double r2275572 = re;
double r2275573 = im;
double r2275574 = hypot(r2275572, r2275573);
double r2275575 = log(r2275574);
double r2275576 = 0.0;
double r2275577 = atan2(r2275573, r2275572);
double r2275578 = r2275576 * r2275577;
double r2275579 = fma(r2275571, r2275575, r2275578);
double r2275580 = r2275571 * r2275571;
double r2275581 = fma(r2275576, r2275576, r2275580);
double r2275582 = sqrt(r2275581);
double r2275583 = r2275579 / r2275582;
double r2275584 = r2275583 / r2275582;
return r2275584;
}



Bits error versus re



Bits error versus im



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