Average Error: 31.1 → 17.2
Time: 3.1s
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 r662849 = re;
        double r662850 = r662849 * r662849;
        double r662851 = im;
        double r662852 = r662851 * r662851;
        double r662853 = r662850 + r662852;
        double r662854 = sqrt(r662853);
        double r662855 = log(r662854);
        return r662855;
}

double f(double re, double im) {
        double r662856 = re;
        double r662857 = -86.01993975715544;
        bool r662858 = r662856 <= r662857;
        double r662859 = -r662856;
        double r662860 = log(r662859);
        double r662861 = 4.875955891928815e-233;
        bool r662862 = r662856 <= r662861;
        double r662863 = im;
        double r662864 = r662863 * r662863;
        double r662865 = r662856 * r662856;
        double r662866 = r662864 + r662865;
        double r662867 = sqrt(r662866);
        double r662868 = log(r662867);
        double r662869 = 5.785268620035206e-190;
        bool r662870 = r662856 <= r662869;
        double r662871 = log(r662863);
        double r662872 = 3.884985694072655e+111;
        bool r662873 = r662856 <= r662872;
        double r662874 = log(r662856);
        double r662875 = r662873 ? r662868 : r662874;
        double r662876 = r662870 ? r662871 : r662875;
        double r662877 = r662862 ? r662868 : r662876;
        double r662878 = r662858 ? r662860 : r662877;
        return r662878;
}

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