Average Error: 31.5 → 24.6
Time: 5.1s
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 r31216 = re;
        double r31217 = r31216 * r31216;
        double r31218 = im;
        double r31219 = r31218 * r31218;
        double r31220 = r31217 + r31219;
        double r31221 = sqrt(r31220);
        double r31222 = log(r31221);
        return r31222;
}

double f(double re, double im) {
        double r31223 = im;
        double r31224 = -2.9574832218065225e+136;
        bool r31225 = r31223 <= r31224;
        double r31226 = re;
        double r31227 = log(r31226);
        double r31228 = -6.570997735276895e+56;
        bool r31229 = r31223 <= r31228;
        double r31230 = r31226 * r31226;
        double r31231 = r31223 * r31223;
        double r31232 = r31230 + r31231;
        double r31233 = sqrt(r31232);
        double r31234 = log(r31233);
        double r31235 = -3.0545556871718285e+33;
        bool r31236 = r31223 <= r31235;
        double r31237 = -r31226;
        double r31238 = log(r31237);
        double r31239 = -4.843689540090472e-262;
        bool r31240 = r31223 <= r31239;
        double r31241 = 9.677784630305516e-234;
        bool r31242 = r31223 <= r31241;
        double r31243 = 3.867993196915089e-217;
        bool r31244 = r31223 <= r31243;
        double r31245 = 1.0098112259657446e-185;
        bool r31246 = r31223 <= r31245;
        double r31247 = 5.177363335544844e+86;
        bool r31248 = r31223 <= r31247;
        double r31249 = log(r31223);
        double r31250 = r31248 ? r31234 : r31249;
        double r31251 = r31246 ? r31227 : r31250;
        double r31252 = r31244 ? r31238 : r31251;
        double r31253 = r31242 ? r31227 : r31252;
        double r31254 = r31240 ? r31234 : r31253;
        double r31255 = r31236 ? r31238 : r31254;
        double r31256 = r31229 ? r31234 : r31255;
        double r31257 = r31225 ? r31227 : r31256;
        return r31257;
}

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)))))