Average Error: 30.7 → 17.4
Time: 2.9s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -3.106642014201959 \cdot 10^{+51}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -2.1939575593023075 \cdot 10^{-249}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 1.3130508878524708 \cdot 10^{-291}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 3.4696741244957 \cdot 10^{+92}:\\ \;\;\;\;\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 -3.106642014201959 \cdot 10^{+51}:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;re \le 1.3130508878524708 \cdot 10^{-291}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r953408 = re;
        double r953409 = r953408 * r953408;
        double r953410 = im;
        double r953411 = r953410 * r953410;
        double r953412 = r953409 + r953411;
        double r953413 = sqrt(r953412);
        double r953414 = log(r953413);
        return r953414;
}

double f(double re, double im) {
        double r953415 = re;
        double r953416 = -3.106642014201959e+51;
        bool r953417 = r953415 <= r953416;
        double r953418 = -r953415;
        double r953419 = log(r953418);
        double r953420 = -2.1939575593023075e-249;
        bool r953421 = r953415 <= r953420;
        double r953422 = im;
        double r953423 = r953422 * r953422;
        double r953424 = r953415 * r953415;
        double r953425 = r953423 + r953424;
        double r953426 = sqrt(r953425);
        double r953427 = log(r953426);
        double r953428 = 1.3130508878524708e-291;
        bool r953429 = r953415 <= r953428;
        double r953430 = log(r953422);
        double r953431 = 3.4696741244957e+92;
        bool r953432 = r953415 <= r953431;
        double r953433 = log(r953415);
        double r953434 = r953432 ? r953427 : r953433;
        double r953435 = r953429 ? r953430 : r953434;
        double r953436 = r953421 ? r953427 : r953435;
        double r953437 = r953417 ? r953419 : r953436;
        return r953437;
}

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 < -3.106642014201959e+51

    1. Initial program 43.1

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

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

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

    if -3.106642014201959e+51 < re < -2.1939575593023075e-249 or 1.3130508878524708e-291 < re < 3.4696741244957e+92

    1. Initial program 20.4

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

    if -2.1939575593023075e-249 < re < 1.3130508878524708e-291

    1. Initial program 31.9

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

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

    if 3.4696741244957e+92 < re

    1. Initial program 49.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.106642014201959 \cdot 10^{+51}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -2.1939575593023075 \cdot 10^{-249}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 1.3130508878524708 \cdot 10^{-291}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 3.4696741244957 \cdot 10^{+92}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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