Average Error: 31.4 → 17.4
Time: 4.1s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -1.1845577271365163 \cdot 10^{+79}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le 1.1144412990449351 \cdot 10^{-247}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 6.513147769961864 \cdot 10^{-175}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 6.701299277965636 \cdot 10^{+118}:\\ \;\;\;\;\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.1845577271365163 \cdot 10^{+79}:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;re \le 6.513147769961864 \cdot 10^{-175}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r503434 = re;
        double r503435 = r503434 * r503434;
        double r503436 = im;
        double r503437 = r503436 * r503436;
        double r503438 = r503435 + r503437;
        double r503439 = sqrt(r503438);
        double r503440 = log(r503439);
        return r503440;
}

double f(double re, double im) {
        double r503441 = re;
        double r503442 = -1.1845577271365163e+79;
        bool r503443 = r503441 <= r503442;
        double r503444 = -r503441;
        double r503445 = log(r503444);
        double r503446 = 1.1144412990449351e-247;
        bool r503447 = r503441 <= r503446;
        double r503448 = im;
        double r503449 = r503448 * r503448;
        double r503450 = r503441 * r503441;
        double r503451 = r503449 + r503450;
        double r503452 = sqrt(r503451);
        double r503453 = log(r503452);
        double r503454 = 6.513147769961864e-175;
        bool r503455 = r503441 <= r503454;
        double r503456 = log(r503448);
        double r503457 = 6.701299277965636e+118;
        bool r503458 = r503441 <= r503457;
        double r503459 = log(r503441);
        double r503460 = r503458 ? r503453 : r503459;
        double r503461 = r503455 ? r503456 : r503460;
        double r503462 = r503447 ? r503453 : r503461;
        double r503463 = r503443 ? r503445 : r503462;
        return r503463;
}

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.1845577271365163e+79

    1. Initial program 47.5

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

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

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

    if -1.1845577271365163e+79 < re < 1.1144412990449351e-247 or 6.513147769961864e-175 < re < 6.701299277965636e+118

    1. Initial program 20.2

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

    if 1.1144412990449351e-247 < re < 6.513147769961864e-175

    1. Initial program 33.3

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

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

    if 6.701299277965636e+118 < re

    1. Initial program 54.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.1845577271365163 \cdot 10^{+79}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le 1.1144412990449351 \cdot 10^{-247}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 6.513147769961864 \cdot 10^{-175}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 6.701299277965636 \cdot 10^{+118}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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