Average Error: 31.5 → 24.6
Time: 4.9s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;im \le -2.957483221806522487658889360988388662853 \cdot 10^{136}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;im \le -6.570997735276894967118260067026371622396 \cdot 10^{56}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;im \le -3054555687171828544312670244831232:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;im \le -4.843689540090472204066045131134642712938 \cdot 10^{-262}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;im \le 9.677784630305516420633165389576243090092 \cdot 10^{-234}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;im \le 3.867993196915089402122192166122080152846 \cdot 10^{-217}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;im \le 1.009811225965744635764018839775433289102 \cdot 10^{-185}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;im \le 5.177363335544844238286158381799834195072 \cdot 10^{86}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log im\\ \end{array}\]
\log \left(\sqrt{re \cdot re + im \cdot im}\right)
\begin{array}{l}
\mathbf{if}\;im \le -2.957483221806522487658889360988388662853 \cdot 10^{136}:\\
\;\;\;\;\log re\\

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

\mathbf{elif}\;im \le -3054555687171828544312670244831232:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;im \le 9.677784630305516420633165389576243090092 \cdot 10^{-234}:\\
\;\;\;\;\log re\\

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

\mathbf{elif}\;im \le 1.009811225965744635764018839775433289102 \cdot 10^{-185}:\\
\;\;\;\;\log re\\

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

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

\end{array}
double f(double re, double im) {
        double r31030 = re;
        double r31031 = r31030 * r31030;
        double r31032 = im;
        double r31033 = r31032 * r31032;
        double r31034 = r31031 + r31033;
        double r31035 = sqrt(r31034);
        double r31036 = log(r31035);
        return r31036;
}

double f(double re, double im) {
        double r31037 = im;
        double r31038 = -2.9574832218065225e+136;
        bool r31039 = r31037 <= r31038;
        double r31040 = re;
        double r31041 = log(r31040);
        double r31042 = -6.570997735276895e+56;
        bool r31043 = r31037 <= r31042;
        double r31044 = r31040 * r31040;
        double r31045 = r31037 * r31037;
        double r31046 = r31044 + r31045;
        double r31047 = sqrt(r31046);
        double r31048 = log(r31047);
        double r31049 = -3.0545556871718285e+33;
        bool r31050 = r31037 <= r31049;
        double r31051 = -r31040;
        double r31052 = log(r31051);
        double r31053 = -4.843689540090472e-262;
        bool r31054 = r31037 <= r31053;
        double r31055 = 9.677784630305516e-234;
        bool r31056 = r31037 <= r31055;
        double r31057 = 3.867993196915089e-217;
        bool r31058 = r31037 <= r31057;
        double r31059 = 1.0098112259657446e-185;
        bool r31060 = r31037 <= r31059;
        double r31061 = 5.177363335544844e+86;
        bool r31062 = r31037 <= r31061;
        double r31063 = log(r31037);
        double r31064 = r31062 ? r31048 : r31063;
        double r31065 = r31060 ? r31041 : r31064;
        double r31066 = r31058 ? r31052 : r31065;
        double r31067 = r31056 ? r31041 : r31066;
        double r31068 = r31054 ? r31048 : r31067;
        double r31069 = r31050 ? r31052 : r31068;
        double r31070 = r31043 ? r31048 : r31069;
        double r31071 = r31039 ? r31041 : r31070;
        return r31071;
}

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 im < -2.9574832218065225e+136 or -4.843689540090472e-262 < im < 9.677784630305516e-234 or 3.867993196915089e-217 < im < 1.0098112259657446e-185

    1. Initial program 46.9

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

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

    if -2.9574832218065225e+136 < im < -6.570997735276895e+56 or -3.0545556871718285e+33 < im < -4.843689540090472e-262 or 1.0098112259657446e-185 < im < 5.177363335544844e+86

    1. Initial program 18.3

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

    if -6.570997735276895e+56 < im < -3.0545556871718285e+33 or 9.677784630305516e-234 < im < 3.867993196915089e-217

    1. Initial program 26.8

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

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

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

    if 5.177363335544844e+86 < im

    1. Initial program 48.2

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

      \[\leadsto \log \color{blue}{im}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification24.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -2.957483221806522487658889360988388662853 \cdot 10^{136}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;im \le -6.570997735276894967118260067026371622396 \cdot 10^{56}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;im \le -3054555687171828544312670244831232:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;im \le -4.843689540090472204066045131134642712938 \cdot 10^{-262}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;im \le 9.677784630305516420633165389576243090092 \cdot 10^{-234}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;im \le 3.867993196915089402122192166122080152846 \cdot 10^{-217}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;im \le 1.009811225965744635764018839775433289102 \cdot 10^{-185}:\\ \;\;\;\;\log re\\ \mathbf{elif}\;im \le 5.177363335544844238286158381799834195072 \cdot 10^{86}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log im\\ \end{array}\]

Reproduce

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