\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}}{\log base}double f(double re, double im, double base) {
double r40462 = im;
double r40463 = re;
double r40464 = atan2(r40462, r40463);
double r40465 = base;
double r40466 = log(r40465);
double r40467 = r40464 * r40466;
double r40468 = r40463 * r40463;
double r40469 = r40462 * r40462;
double r40470 = r40468 + r40469;
double r40471 = sqrt(r40470);
double r40472 = log(r40471);
double r40473 = 0.0;
double r40474 = r40472 * r40473;
double r40475 = r40467 - r40474;
double r40476 = r40466 * r40466;
double r40477 = r40473 * r40473;
double r40478 = r40476 + r40477;
double r40479 = r40475 / r40478;
return r40479;
}
double f(double re, double im, double base) {
double r40480 = im;
double r40481 = re;
double r40482 = atan2(r40480, r40481);
double r40483 = base;
double r40484 = log(r40483);
double r40485 = r40482 / r40484;
return r40485;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
Initial program 31.0
Simplified0.4
Taylor expanded around 0 0.3
Final simplification0.3
herbie shell --seed 2019209 +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))))