\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{1}{\mathsf{hypot}\left(\log base, 0.0\right)} \cdot \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(0.0, \log base\right)}double f(double re, double im, double base) {
double r111930 = re;
double r111931 = r111930 * r111930;
double r111932 = im;
double r111933 = r111932 * r111932;
double r111934 = r111931 + r111933;
double r111935 = sqrt(r111934);
double r111936 = log(r111935);
double r111937 = base;
double r111938 = log(r111937);
double r111939 = r111936 * r111938;
double r111940 = atan2(r111932, r111930);
double r111941 = 0.0;
double r111942 = r111940 * r111941;
double r111943 = r111939 + r111942;
double r111944 = r111938 * r111938;
double r111945 = r111941 * r111941;
double r111946 = r111944 + r111945;
double r111947 = r111943 / r111946;
return r111947;
}
double f(double re, double im, double base) {
double r111948 = 1.0;
double r111949 = base;
double r111950 = log(r111949);
double r111951 = 0.0;
double r111952 = hypot(r111950, r111951);
double r111953 = r111948 / r111952;
double r111954 = re;
double r111955 = im;
double r111956 = hypot(r111954, r111955);
double r111957 = log(r111956);
double r111958 = atan2(r111955, r111954);
double r111959 = r111958 * r111951;
double r111960 = fma(r111957, r111950, r111959);
double r111961 = hypot(r111951, r111950);
double r111962 = r111960 / r111961;
double r111963 = r111953 * r111962;
return r111963;
}



Bits error versus re



Bits error versus im



Bits error versus base
Initial program 31.0
Simplified0.5
rmApplied add-sqr-sqrt0.5
Applied associate-/r*0.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
Applied sqrt-prod0.7
Applied add-sqr-sqrt1.0
Applied *-un-lft-identity1.0
Applied times-frac1.0
Applied times-frac1.0
Simplified0.7
Simplified0.5
Final simplification0.5
herbie shell --seed 2019303 +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))))