Average Error: 31.7 → 17.7
Time: 1.3s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -205453296394218056740696489984:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le 5.393409333016407349382852797071554062013 \cdot 10^{-267}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 3.879358021752326621349199686757123097293 \cdot 10^{-199}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 3.489426022293498639008361120657128859232 \cdot 10^{55}:\\ \;\;\;\;\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 -205453296394218056740696489984:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\

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

\mathbf{elif}\;re \le 3.879358021752326621349199686757123097293 \cdot 10^{-199}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r30399 = re;
        double r30400 = r30399 * r30399;
        double r30401 = im;
        double r30402 = r30401 * r30401;
        double r30403 = r30400 + r30402;
        double r30404 = sqrt(r30403);
        double r30405 = log(r30404);
        return r30405;
}

double f(double re, double im) {
        double r30406 = re;
        double r30407 = -2.0545329639421806e+29;
        bool r30408 = r30406 <= r30407;
        double r30409 = -1.0;
        double r30410 = r30409 * r30406;
        double r30411 = log(r30410);
        double r30412 = 5.393409333016407e-267;
        bool r30413 = r30406 <= r30412;
        double r30414 = r30406 * r30406;
        double r30415 = im;
        double r30416 = r30415 * r30415;
        double r30417 = r30414 + r30416;
        double r30418 = sqrt(r30417);
        double r30419 = log(r30418);
        double r30420 = 3.8793580217523266e-199;
        bool r30421 = r30406 <= r30420;
        double r30422 = log(r30415);
        double r30423 = 3.4894260222934986e+55;
        bool r30424 = r30406 <= r30423;
        double r30425 = log(r30406);
        double r30426 = r30424 ? r30419 : r30425;
        double r30427 = r30421 ? r30422 : r30426;
        double r30428 = r30413 ? r30419 : r30427;
        double r30429 = r30408 ? r30411 : r30428;
        return r30429;
}

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 < -2.0545329639421806e+29

    1. Initial program 42.1

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

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

    if -2.0545329639421806e+29 < re < 5.393409333016407e-267 or 3.8793580217523266e-199 < re < 3.4894260222934986e+55

    1. Initial program 21.8

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

    if 5.393409333016407e-267 < re < 3.8793580217523266e-199

    1. Initial program 31.7

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

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

    if 3.4894260222934986e+55 < re

    1. Initial program 45.4

      \[\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.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -205453296394218056740696489984:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le 5.393409333016407349382852797071554062013 \cdot 10^{-267}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 3.879358021752326621349199686757123097293 \cdot 10^{-199}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 3.489426022293498639008361120657128859232 \cdot 10^{55}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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