Average Error: 31.1 → 17.2
Time: 3.2s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -86.01993975715544:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le 4.875955891928815 \cdot 10^{-233}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 5.785268620035206 \cdot 10^{-190}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 3.884985694072655 \cdot 10^{+111}:\\ \;\;\;\;\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 -86.01993975715544:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;re \le 5.785268620035206 \cdot 10^{-190}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r728681 = re;
        double r728682 = r728681 * r728681;
        double r728683 = im;
        double r728684 = r728683 * r728683;
        double r728685 = r728682 + r728684;
        double r728686 = sqrt(r728685);
        double r728687 = log(r728686);
        return r728687;
}

double f(double re, double im) {
        double r728688 = re;
        double r728689 = -86.01993975715544;
        bool r728690 = r728688 <= r728689;
        double r728691 = -r728688;
        double r728692 = log(r728691);
        double r728693 = 4.875955891928815e-233;
        bool r728694 = r728688 <= r728693;
        double r728695 = im;
        double r728696 = r728695 * r728695;
        double r728697 = r728688 * r728688;
        double r728698 = r728696 + r728697;
        double r728699 = sqrt(r728698);
        double r728700 = log(r728699);
        double r728701 = 5.785268620035206e-190;
        bool r728702 = r728688 <= r728701;
        double r728703 = log(r728695);
        double r728704 = 3.884985694072655e+111;
        bool r728705 = r728688 <= r728704;
        double r728706 = log(r728688);
        double r728707 = r728705 ? r728700 : r728706;
        double r728708 = r728702 ? r728703 : r728707;
        double r728709 = r728694 ? r728700 : r728708;
        double r728710 = r728690 ? r728692 : r728709;
        return r728710;
}

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 < -86.01993975715544

    1. Initial program 38.6

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

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

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

    if -86.01993975715544 < re < 4.875955891928815e-233 or 5.785268620035206e-190 < re < 3.884985694072655e+111

    1. Initial program 21.1

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

    if 4.875955891928815e-233 < re < 5.785268620035206e-190

    1. Initial program 33.7

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

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

    if 3.884985694072655e+111 < re

    1. Initial program 52.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -86.01993975715544:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le 4.875955891928815 \cdot 10^{-233}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 5.785268620035206 \cdot 10^{-190}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 3.884985694072655 \cdot 10^{+111}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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