Average Error: 31.3 → 16.8
Time: 4.4s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -1.3743535485976946 \cdot 10^{+147}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -1.8362044109739617 \cdot 10^{-302}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 3.2371191719503383 \cdot 10^{-277}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 4.5962833543511176 \cdot 10^{+83}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]
\log \left(\sqrt{re \cdot re + im \cdot im}\right)
\begin{array}{l}
\mathbf{if}\;re \le -1.3743535485976946 \cdot 10^{+147}:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;re \le 3.2371191719503383 \cdot 10^{-277}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r1125796 = re;
        double r1125797 = r1125796 * r1125796;
        double r1125798 = im;
        double r1125799 = r1125798 * r1125798;
        double r1125800 = r1125797 + r1125799;
        double r1125801 = sqrt(r1125800);
        double r1125802 = log(r1125801);
        return r1125802;
}

double f(double re, double im) {
        double r1125803 = re;
        double r1125804 = -1.3743535485976946e+147;
        bool r1125805 = r1125803 <= r1125804;
        double r1125806 = -r1125803;
        double r1125807 = log(r1125806);
        double r1125808 = -1.8362044109739617e-302;
        bool r1125809 = r1125803 <= r1125808;
        double r1125810 = im;
        double r1125811 = r1125810 * r1125810;
        double r1125812 = r1125803 * r1125803;
        double r1125813 = r1125811 + r1125812;
        double r1125814 = sqrt(r1125813);
        double r1125815 = log(r1125814);
        double r1125816 = 3.2371191719503383e-277;
        bool r1125817 = r1125803 <= r1125816;
        double r1125818 = log(r1125810);
        double r1125819 = 4.5962833543511176e+83;
        bool r1125820 = r1125803 <= r1125819;
        double r1125821 = log(r1125803);
        double r1125822 = r1125820 ? r1125815 : r1125821;
        double r1125823 = r1125817 ? r1125818 : r1125822;
        double r1125824 = r1125809 ? r1125815 : r1125823;
        double r1125825 = r1125805 ? r1125807 : r1125824;
        return r1125825;
}

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 4 regimes
  2. if re < -1.3743535485976946e+147

    1. Initial program 59.8

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

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

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

    if -1.3743535485976946e+147 < re < -1.8362044109739617e-302 or 3.2371191719503383e-277 < re < 4.5962833543511176e+83

    1. Initial program 20.5

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

    if -1.8362044109739617e-302 < re < 3.2371191719503383e-277

    1. Initial program 32.3

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

      \[\leadsto \log \color{blue}{im}\]

    if 4.5962833543511176e+83 < re

    1. Initial program 48.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.3743535485976946 \cdot 10^{+147}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -1.8362044109739617 \cdot 10^{-302}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 3.2371191719503383 \cdot 10^{-277}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 4.5962833543511176 \cdot 10^{+83}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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