Average Error: 32.3 → 17.8
Time: 1.6s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -4.219332295965777137041720193068407814529 \cdot 10^{82}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -3.743447547042940916879606925039648794356 \cdot 10^{-217}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -1.6117218241464792617406634329935791946 \cdot 10^{-282}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 124645931887550053482496:\\ \;\;\;\;\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 -4.219332295965777137041720193068407814529 \cdot 10^{82}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\

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

\mathbf{elif}\;re \le -1.6117218241464792617406634329935791946 \cdot 10^{-282}:\\
\;\;\;\;\log im\\

\mathbf{elif}\;re \le 124645931887550053482496:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\

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

\end{array}
double f(double re, double im) {
        double r39013 = re;
        double r39014 = r39013 * r39013;
        double r39015 = im;
        double r39016 = r39015 * r39015;
        double r39017 = r39014 + r39016;
        double r39018 = sqrt(r39017);
        double r39019 = log(r39018);
        return r39019;
}

double f(double re, double im) {
        double r39020 = re;
        double r39021 = -4.219332295965777e+82;
        bool r39022 = r39020 <= r39021;
        double r39023 = -1.0;
        double r39024 = r39023 * r39020;
        double r39025 = log(r39024);
        double r39026 = -3.743447547042941e-217;
        bool r39027 = r39020 <= r39026;
        double r39028 = r39020 * r39020;
        double r39029 = im;
        double r39030 = r39029 * r39029;
        double r39031 = r39028 + r39030;
        double r39032 = sqrt(r39031);
        double r39033 = log(r39032);
        double r39034 = -1.6117218241464793e-282;
        bool r39035 = r39020 <= r39034;
        double r39036 = log(r39029);
        double r39037 = 1.2464593188755005e+23;
        bool r39038 = r39020 <= r39037;
        double r39039 = log(r39020);
        double r39040 = r39038 ? r39033 : r39039;
        double r39041 = r39035 ? r39036 : r39040;
        double r39042 = r39027 ? r39033 : r39041;
        double r39043 = r39022 ? r39025 : r39042;
        return r39043;
}

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 < -4.219332295965777e+82

    1. Initial program 49.1

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

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

    if -4.219332295965777e+82 < re < -3.743447547042941e-217 or -1.6117218241464793e-282 < re < 1.2464593188755005e+23

    1. Initial program 21.7

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

    if -3.743447547042941e-217 < re < -1.6117218241464793e-282

    1. Initial program 34.5

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

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

    if 1.2464593188755005e+23 < re

    1. Initial program 41.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -4.219332295965777137041720193068407814529 \cdot 10^{82}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -3.743447547042940916879606925039648794356 \cdot 10^{-217}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -1.6117218241464792617406634329935791946 \cdot 10^{-282}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 124645931887550053482496:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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