\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}\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{\tan^{-1}_* \frac{im}{re}}{\log base}\right)\right)double f(double re, double im, double base) {
double r28216 = im;
double r28217 = re;
double r28218 = atan2(r28216, r28217);
double r28219 = base;
double r28220 = log(r28219);
double r28221 = r28218 * r28220;
double r28222 = r28217 * r28217;
double r28223 = r28216 * r28216;
double r28224 = r28222 + r28223;
double r28225 = sqrt(r28224);
double r28226 = log(r28225);
double r28227 = 0.0;
double r28228 = r28226 * r28227;
double r28229 = r28221 - r28228;
double r28230 = r28220 * r28220;
double r28231 = r28227 * r28227;
double r28232 = r28230 + r28231;
double r28233 = r28229 / r28232;
return r28233;
}
double f(double re, double im, double base) {
double r28234 = im;
double r28235 = re;
double r28236 = atan2(r28234, r28235);
double r28237 = base;
double r28238 = log(r28237);
double r28239 = r28236 / r28238;
double r28240 = expm1(r28239);
double r28241 = log1p(r28240);
return r28241;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
Initial program 31.8
Simplified0.4
Taylor expanded around 0 0.3
rmApplied log1p-expm1-u0.3
Final simplification0.3
herbie shell --seed 2019323 +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))))