\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\begin{array}{l}
\mathbf{if}\;re \leq -1.0190895301535234 \cdot 10^{+121}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\
\mathbf{elif}\;re \leq -8.006226079427904 \cdot 10^{-185}:\\
\;\;\;\;\frac{\log \left({\left(re \cdot re + im \cdot im\right)}^{0.3333333333333333} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right)}{\log base}\\
\mathbf{elif}\;re \leq -3.2580037546917335 \cdot 10^{-305}:\\
\;\;\;\;\frac{\log im}{\log base}\\
\mathbf{elif}\;re \leq 3.3742910823838554 \cdot 10^{-270}:\\
\;\;\;\;\frac{\log \left({\left(re \cdot re + im \cdot im\right)}^{0.3333333333333333} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right)}{\log base}\\
\mathbf{elif}\;re \leq 3.9152423703811223 \cdot 10^{-165}:\\
\;\;\;\;\log im \cdot \frac{1}{\log base}\\
\mathbf{elif}\;re \leq 7.776536635168688 \cdot 10^{+145}:\\
\;\;\;\;\frac{\log \left({\left(re \cdot re + im \cdot im\right)}^{0.3333333333333333} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right)}{\log base}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\log base} \cdot \log re\\
\end{array}(FPCore (re im base) :precision binary64 (/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0.0)) (+ (* (log base) (log base)) (* 0.0 0.0))))
(FPCore (re im base)
:precision binary64
(if (<= re -1.0190895301535234e+121)
(/ (log (- re)) (log base))
(if (<= re -8.006226079427904e-185)
(/
(log
(*
(pow (+ (* re re) (* im im)) 0.3333333333333333)
(cbrt (sqrt (+ (* re re) (* im im))))))
(log base))
(if (<= re -3.2580037546917335e-305)
(/ (log im) (log base))
(if (<= re 3.3742910823838554e-270)
(/
(log
(*
(pow (+ (* re re) (* im im)) 0.3333333333333333)
(cbrt (sqrt (+ (* re re) (* im im))))))
(log base))
(if (<= re 3.9152423703811223e-165)
(* (log im) (/ 1.0 (log base)))
(if (<= re 7.776536635168688e+145)
(/
(log
(*
(pow (+ (* re re) (* im im)) 0.3333333333333333)
(cbrt (sqrt (+ (* re re) (* im im))))))
(log base))
(* (/ 1.0 (log base)) (log re)))))))))double code(double re, double im, double base) {
return ((log(sqrt((re * re) + (im * im))) * log(base)) + (atan2(im, re) * 0.0)) / ((log(base) * log(base)) + (0.0 * 0.0));
}
double code(double re, double im, double base) {
double tmp;
if (re <= -1.0190895301535234e+121) {
tmp = log(-re) / log(base);
} else if (re <= -8.006226079427904e-185) {
tmp = log(pow(((re * re) + (im * im)), 0.3333333333333333) * cbrt(sqrt((re * re) + (im * im)))) / log(base);
} else if (re <= -3.2580037546917335e-305) {
tmp = log(im) / log(base);
} else if (re <= 3.3742910823838554e-270) {
tmp = log(pow(((re * re) + (im * im)), 0.3333333333333333) * cbrt(sqrt((re * re) + (im * im)))) / log(base);
} else if (re <= 3.9152423703811223e-165) {
tmp = log(im) * (1.0 / log(base));
} else if (re <= 7.776536635168688e+145) {
tmp = log(pow(((re * re) + (im * im)), 0.3333333333333333) * cbrt(sqrt((re * re) + (im * im)))) / log(base);
} else {
tmp = (1.0 / log(base)) * log(re);
}
return tmp;
}



Bits error versus re



Bits error versus im



Bits error versus base
Results
if re < -1.01908953015352341e121Initial program 56.1
Simplified56.1
Taylor expanded around -inf 8.2
Simplified8.2
if -1.01908953015352341e121 < re < -8.00622607942790387e-185 or -3.2580037546917335e-305 < re < 3.37429108238385545e-270 or 3.91524237038112229e-165 < re < 7.776536635168688e145Initial program 18.0
Simplified17.9
rmApplied add-cube-cbrt_binary6417.9
rmApplied pow1/3_binary6417.9
Applied pow1/3_binary6417.9
Applied pow-prod-down_binary6417.9
Simplified17.9
if -8.00622607942790387e-185 < re < -3.2580037546917335e-305Initial program 31.3
Simplified31.2
Taylor expanded around 0 32.4
if 3.37429108238385545e-270 < re < 3.91524237038112229e-165Initial program 30.8
Simplified30.7
rmApplied div-inv_binary6430.7
Taylor expanded around 0 35.0
if 7.776536635168688e145 < re Initial program 61.5
Simplified61.5
rmApplied div-inv_binary6461.5
Taylor expanded around inf 6.8
Final simplification17.9
herbie shell --seed 2020220
(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))))