Average Error: 30.6 → 17.0
Time: 6.9s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -1.272776742038984 \cdot 10^{+36}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -2.5387418282241494 \cdot 10^{-275}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 3.259709475737078 \cdot 10^{-301}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 8.145199547234516 \cdot 10^{-246}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 4.071831069248947 \cdot 10^{-214}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 6.734502278787053 \cdot 10^{+66}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\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.272776742038984 \cdot 10^{+36}:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;re \le 3.259709475737078 \cdot 10^{-301}:\\
\;\;\;\;\log im\\

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

\mathbf{elif}\;re \le 4.071831069248947 \cdot 10^{-214}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r1793495 = re;
        double r1793496 = r1793495 * r1793495;
        double r1793497 = im;
        double r1793498 = r1793497 * r1793497;
        double r1793499 = r1793496 + r1793498;
        double r1793500 = sqrt(r1793499);
        double r1793501 = log(r1793500);
        return r1793501;
}

double f(double re, double im) {
        double r1793502 = re;
        double r1793503 = -1.272776742038984e+36;
        bool r1793504 = r1793502 <= r1793503;
        double r1793505 = -r1793502;
        double r1793506 = log(r1793505);
        double r1793507 = -2.5387418282241494e-275;
        bool r1793508 = r1793502 <= r1793507;
        double r1793509 = im;
        double r1793510 = r1793509 * r1793509;
        double r1793511 = r1793502 * r1793502;
        double r1793512 = r1793510 + r1793511;
        double r1793513 = sqrt(r1793512);
        double r1793514 = log(r1793513);
        double r1793515 = 3.259709475737078e-301;
        bool r1793516 = r1793502 <= r1793515;
        double r1793517 = log(r1793509);
        double r1793518 = 8.145199547234516e-246;
        bool r1793519 = r1793502 <= r1793518;
        double r1793520 = 4.071831069248947e-214;
        bool r1793521 = r1793502 <= r1793520;
        double r1793522 = 6.734502278787053e+66;
        bool r1793523 = r1793502 <= r1793522;
        double r1793524 = log(r1793502);
        double r1793525 = r1793523 ? r1793514 : r1793524;
        double r1793526 = r1793521 ? r1793517 : r1793525;
        double r1793527 = r1793519 ? r1793514 : r1793526;
        double r1793528 = r1793516 ? r1793517 : r1793527;
        double r1793529 = r1793508 ? r1793514 : r1793528;
        double r1793530 = r1793504 ? r1793506 : r1793529;
        return r1793530;
}

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.272776742038984e+36

    1. Initial program 41.3

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

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

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

    if -1.272776742038984e+36 < re < -2.5387418282241494e-275 or 3.259709475737078e-301 < re < 8.145199547234516e-246 or 4.071831069248947e-214 < re < 6.734502278787053e+66

    1. Initial program 20.8

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

    if -2.5387418282241494e-275 < re < 3.259709475737078e-301 or 8.145199547234516e-246 < re < 4.071831069248947e-214

    1. Initial program 33.3

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

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

    if 6.734502278787053e+66 < re

    1. Initial program 43.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.272776742038984 \cdot 10^{+36}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -2.5387418282241494 \cdot 10^{-275}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 3.259709475737078 \cdot 10^{-301}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 8.145199547234516 \cdot 10^{-246}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 4.071831069248947 \cdot 10^{-214}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 6.734502278787053 \cdot 10^{+66}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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