Average Error: 31.4 → 17.8
Time: 3.4s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -6.6739378125203485 \cdot 10^{115}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -5.71025445486617605 \cdot 10^{-174}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -4.1151896437215007 \cdot 10^{-280}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 2.99476022231093984 \cdot 10^{87}:\\ \;\;\;\;\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 -6.6739378125203485 \cdot 10^{115}:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;re \le -4.1151896437215007 \cdot 10^{-280}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r21556 = re;
        double r21557 = r21556 * r21556;
        double r21558 = im;
        double r21559 = r21558 * r21558;
        double r21560 = r21557 + r21559;
        double r21561 = sqrt(r21560);
        double r21562 = log(r21561);
        return r21562;
}

double f(double re, double im) {
        double r21563 = re;
        double r21564 = -6.6739378125203485e+115;
        bool r21565 = r21563 <= r21564;
        double r21566 = -r21563;
        double r21567 = log(r21566);
        double r21568 = -5.710254454866176e-174;
        bool r21569 = r21563 <= r21568;
        double r21570 = r21563 * r21563;
        double r21571 = im;
        double r21572 = r21571 * r21571;
        double r21573 = r21570 + r21572;
        double r21574 = sqrt(r21573);
        double r21575 = log(r21574);
        double r21576 = -4.1151896437215007e-280;
        bool r21577 = r21563 <= r21576;
        double r21578 = log(r21571);
        double r21579 = 2.99476022231094e+87;
        bool r21580 = r21563 <= r21579;
        double r21581 = log(r21563);
        double r21582 = r21580 ? r21575 : r21581;
        double r21583 = r21577 ? r21578 : r21582;
        double r21584 = r21569 ? r21575 : r21583;
        double r21585 = r21565 ? r21567 : r21584;
        return r21585;
}

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 < -6.6739378125203485e+115

    1. Initial program 53.9

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

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

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

    if -6.6739378125203485e+115 < re < -5.710254454866176e-174 or -4.1151896437215007e-280 < re < 2.99476022231094e+87

    1. Initial program 19.7

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

    if -5.710254454866176e-174 < re < -4.1151896437215007e-280

    1. Initial program 31.4

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

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

    if 2.99476022231094e+87 < re

    1. Initial program 50.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -6.6739378125203485 \cdot 10^{115}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -5.71025445486617605 \cdot 10^{-174}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -4.1151896437215007 \cdot 10^{-280}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 2.99476022231093984 \cdot 10^{87}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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