\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}{\frac{\mathsf{hypot}\left(\log base, 0.0\right)}{1}} \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(\log base, 0.0\right) \cdot 1}double f(double re, double im, double base) {
double r43138 = re;
double r43139 = r43138 * r43138;
double r43140 = im;
double r43141 = r43140 * r43140;
double r43142 = r43139 + r43141;
double r43143 = sqrt(r43142);
double r43144 = log(r43143);
double r43145 = base;
double r43146 = log(r43145);
double r43147 = r43144 * r43146;
double r43148 = atan2(r43140, r43138);
double r43149 = 0.0;
double r43150 = r43148 * r43149;
double r43151 = r43147 + r43150;
double r43152 = r43146 * r43146;
double r43153 = r43149 * r43149;
double r43154 = r43152 + r43153;
double r43155 = r43151 / r43154;
return r43155;
}
double f(double re, double im, double base) {
double r43156 = 1.0;
double r43157 = base;
double r43158 = log(r43157);
double r43159 = 0.0;
double r43160 = hypot(r43158, r43159);
double r43161 = r43160 / r43156;
double r43162 = r43156 / r43161;
double r43163 = re;
double r43164 = im;
double r43165 = hypot(r43163, r43164);
double r43166 = log(r43165);
double r43167 = atan2(r43164, r43163);
double r43168 = r43167 * r43159;
double r43169 = fma(r43166, r43158, r43168);
double r43170 = r43160 * r43156;
double r43171 = r43169 / r43170;
double r43172 = r43162 * r43171;
return r43172;
}



Bits error versus re



Bits error versus im



Bits error versus base
Initial program 31.9
rmApplied hypot-def0.5
rmApplied add-sqr-sqrt0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Simplified0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020018 +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))))