Average Error: 31.9 → 18.1
Time: 3.8s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -2.111326592735039579788335414834132413433 \cdot 10^{117}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le 5.246446846048960229429099302337261201176 \cdot 10^{-199}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 1.178720592182588159154577176110759415934 \cdot 10^{-172}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;re \le 9.769663399544422990952065102026170637802 \cdot 10^{95}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]
\log \left(\sqrt{re \cdot re + im \cdot im}\right)
\begin{array}{l}
\mathbf{if}\;re \le -2.111326592735039579788335414834132413433 \cdot 10^{117}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\

\mathbf{elif}\;re \le 5.246446846048960229429099302337261201176 \cdot 10^{-199}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\

\mathbf{elif}\;re \le 1.178720592182588159154577176110759415934 \cdot 10^{-172}:\\
\;\;\;\;\log re\\

\mathbf{elif}\;re \le 9.769663399544422990952065102026170637802 \cdot 10^{95}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\

\mathbf{else}:\\
\;\;\;\;\log re\\

\end{array}
double f(double re, double im) {
        double r47893 = re;
        double r47894 = r47893 * r47893;
        double r47895 = im;
        double r47896 = r47895 * r47895;
        double r47897 = r47894 + r47896;
        double r47898 = sqrt(r47897);
        double r47899 = log(r47898);
        return r47899;
}

double f(double re, double im) {
        double r47900 = re;
        double r47901 = -2.1113265927350396e+117;
        bool r47902 = r47900 <= r47901;
        double r47903 = -1.0;
        double r47904 = r47903 * r47900;
        double r47905 = log(r47904);
        double r47906 = 5.24644684604896e-199;
        bool r47907 = r47900 <= r47906;
        double r47908 = r47900 * r47900;
        double r47909 = im;
        double r47910 = r47909 * r47909;
        double r47911 = r47908 + r47910;
        double r47912 = sqrt(r47911);
        double r47913 = log(r47912);
        double r47914 = 1.1787205921825882e-172;
        bool r47915 = r47900 <= r47914;
        double r47916 = log(r47900);
        double r47917 = 9.769663399544423e+95;
        bool r47918 = r47900 <= r47917;
        double r47919 = r47918 ? r47913 : r47916;
        double r47920 = r47915 ? r47916 : r47919;
        double r47921 = r47907 ? r47913 : r47920;
        double r47922 = r47902 ? r47905 : r47921;
        return r47922;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if re < -2.1113265927350396e+117

    1. Initial program 54.5

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
    2. Taylor expanded around -inf 8.6

      \[\leadsto \log \color{blue}{\left(-1 \cdot re\right)}\]

    if -2.1113265927350396e+117 < re < 5.24644684604896e-199 or 1.1787205921825882e-172 < re < 9.769663399544423e+95

    1. Initial program 21.7

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]

    if 5.24644684604896e-199 < re < 1.1787205921825882e-172 or 9.769663399544423e+95 < re

    1. Initial program 48.7

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
    2. Taylor expanded around inf 13.5

      \[\leadsto \log \color{blue}{re}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification18.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.111326592735039579788335414834132413433 \cdot 10^{117}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le 5.246446846048960229429099302337261201176 \cdot 10^{-199}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 1.178720592182588159154577176110759415934 \cdot 10^{-172}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;re \le 9.769663399544422990952065102026170637802 \cdot 10^{95}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

herbie shell --seed 2019298 
(FPCore (re im)
  :name "math.log/1 on complex, real part"
  :precision binary64
  (log (sqrt (+ (* re re) (* im im)))))