Average Error: 31.9 → 17.5
Time: 23.3s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -1.257112734122685429337634185885113846063 \cdot 10^{130}:\\ \;\;\;\;-\log \left(\frac{-1}{re}\right)\\ \mathbf{elif}\;re \le -1.082781542809915013551950598635310407664 \cdot 10^{-198}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -1.350068654779021630227434578668149263935 \cdot 10^{-288}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 4.433568900171380321450814116162656047486 \cdot 10^{74}:\\ \;\;\;\;\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 -1.257112734122685429337634185885113846063 \cdot 10^{130}:\\
\;\;\;\;-\log \left(\frac{-1}{re}\right)\\

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

\mathbf{elif}\;re \le -1.350068654779021630227434578668149263935 \cdot 10^{-288}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r41115 = re;
        double r41116 = r41115 * r41115;
        double r41117 = im;
        double r41118 = r41117 * r41117;
        double r41119 = r41116 + r41118;
        double r41120 = sqrt(r41119);
        double r41121 = log(r41120);
        return r41121;
}

double f(double re, double im) {
        double r41122 = re;
        double r41123 = -1.2571127341226854e+130;
        bool r41124 = r41122 <= r41123;
        double r41125 = -1.0;
        double r41126 = r41125 / r41122;
        double r41127 = log(r41126);
        double r41128 = -r41127;
        double r41129 = -1.082781542809915e-198;
        bool r41130 = r41122 <= r41129;
        double r41131 = r41122 * r41122;
        double r41132 = im;
        double r41133 = r41132 * r41132;
        double r41134 = r41131 + r41133;
        double r41135 = sqrt(r41134);
        double r41136 = log(r41135);
        double r41137 = -1.3500686547790216e-288;
        bool r41138 = r41122 <= r41137;
        double r41139 = log(r41132);
        double r41140 = 4.4335689001713803e+74;
        bool r41141 = r41122 <= r41140;
        double r41142 = log(r41122);
        double r41143 = r41141 ? r41136 : r41142;
        double r41144 = r41138 ? r41139 : r41143;
        double r41145 = r41130 ? r41136 : r41144;
        double r41146 = r41124 ? r41128 : r41145;
        return r41146;
}

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.2571127341226854e+130

    1. Initial program 58.4

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

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

    if -1.2571127341226854e+130 < re < -1.082781542809915e-198 or -1.3500686547790216e-288 < re < 4.4335689001713803e+74

    1. Initial program 20.4

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

    if -1.082781542809915e-198 < re < -1.3500686547790216e-288

    1. Initial program 29.7

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

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

    if 4.4335689001713803e+74 < re

    1. Initial program 47.9

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.257112734122685429337634185885113846063 \cdot 10^{130}:\\ \;\;\;\;-\log \left(\frac{-1}{re}\right)\\ \mathbf{elif}\;re \le -1.082781542809915013551950598635310407664 \cdot 10^{-198}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -1.350068654779021630227434578668149263935 \cdot 10^{-288}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 4.433568900171380321450814116162656047486 \cdot 10^{74}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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