Average Error: 31.8 → 16.8
Time: 12.8s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -6.35114368572189993071033166198605826169 \cdot 10^{103}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -3.240034389533803828723034610715031267776 \cdot 10^{-262}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 2.715396324398381567593668375558902625339 \cdot 10^{-222}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 1.669118752094688727866220975814758475131 \cdot 10^{123}:\\ \;\;\;\;\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 -6.35114368572189993071033166198605826169 \cdot 10^{103}:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;re \le 2.715396324398381567593668375558902625339 \cdot 10^{-222}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r1580643 = re;
        double r1580644 = r1580643 * r1580643;
        double r1580645 = im;
        double r1580646 = r1580645 * r1580645;
        double r1580647 = r1580644 + r1580646;
        double r1580648 = sqrt(r1580647);
        double r1580649 = log(r1580648);
        return r1580649;
}

double f(double re, double im) {
        double r1580650 = re;
        double r1580651 = -6.3511436857219e+103;
        bool r1580652 = r1580650 <= r1580651;
        double r1580653 = -r1580650;
        double r1580654 = log(r1580653);
        double r1580655 = -3.240034389533804e-262;
        bool r1580656 = r1580650 <= r1580655;
        double r1580657 = im;
        double r1580658 = r1580657 * r1580657;
        double r1580659 = r1580650 * r1580650;
        double r1580660 = r1580658 + r1580659;
        double r1580661 = sqrt(r1580660);
        double r1580662 = log(r1580661);
        double r1580663 = 2.7153963243983816e-222;
        bool r1580664 = r1580650 <= r1580663;
        double r1580665 = log(r1580657);
        double r1580666 = 1.6691187520946887e+123;
        bool r1580667 = r1580650 <= r1580666;
        double r1580668 = log(r1580650);
        double r1580669 = r1580667 ? r1580662 : r1580668;
        double r1580670 = r1580664 ? r1580665 : r1580669;
        double r1580671 = r1580656 ? r1580662 : r1580670;
        double r1580672 = r1580652 ? r1580654 : r1580671;
        return r1580672;
}

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 < -6.3511436857219e+103

    1. Initial program 52.3

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

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

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

    if -6.3511436857219e+103 < re < -3.240034389533804e-262 or 2.7153963243983816e-222 < re < 1.6691187520946887e+123

    1. Initial program 19.1

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

    if -3.240034389533804e-262 < re < 2.7153963243983816e-222

    1. Initial program 33.2

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

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

    if 1.6691187520946887e+123 < re

    1. Initial program 55.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -6.35114368572189993071033166198605826169 \cdot 10^{103}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -3.240034389533803828723034610715031267776 \cdot 10^{-262}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{elif}\;re \le 2.715396324398381567593668375558902625339 \cdot 10^{-222}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 1.669118752094688727866220975814758475131 \cdot 10^{123}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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