Average Error: 31.7 → 17.4
Time: 4.2s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -2.63184584490692683811764236696495705145 \cdot 10^{112}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -5.08697951464219784890620928937007113919 \cdot 10^{-205}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -2.196597309232864908492796515168661297752 \cdot 10^{-301}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 120904531.494764626026153564453125:\\ \;\;\;\;\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 -2.63184584490692683811764236696495705145 \cdot 10^{112}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\

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

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

\mathbf{elif}\;re \le 120904531.494764626026153564453125:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\

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

\end{array}
double f(double re, double im) {
        double r42013 = re;
        double r42014 = r42013 * r42013;
        double r42015 = im;
        double r42016 = r42015 * r42015;
        double r42017 = r42014 + r42016;
        double r42018 = sqrt(r42017);
        double r42019 = log(r42018);
        return r42019;
}

double f(double re, double im) {
        double r42020 = re;
        double r42021 = -2.631845844906927e+112;
        bool r42022 = r42020 <= r42021;
        double r42023 = -1.0;
        double r42024 = r42023 * r42020;
        double r42025 = log(r42024);
        double r42026 = -5.086979514642198e-205;
        bool r42027 = r42020 <= r42026;
        double r42028 = r42020 * r42020;
        double r42029 = im;
        double r42030 = r42029 * r42029;
        double r42031 = r42028 + r42030;
        double r42032 = sqrt(r42031);
        double r42033 = log(r42032);
        double r42034 = -2.196597309232865e-301;
        bool r42035 = r42020 <= r42034;
        double r42036 = log(r42029);
        double r42037 = 120904531.49476463;
        bool r42038 = r42020 <= r42037;
        double r42039 = log(r42020);
        double r42040 = r42038 ? r42033 : r42039;
        double r42041 = r42035 ? r42036 : r42040;
        double r42042 = r42027 ? r42033 : r42041;
        double r42043 = r42022 ? r42025 : r42042;
        return r42043;
}

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.631845844906927e+112

    1. Initial program 54.5

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

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

    if -2.631845844906927e+112 < re < -5.086979514642198e-205 or -2.196597309232865e-301 < re < 120904531.49476463

    1. Initial program 20.4

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

    if -5.086979514642198e-205 < re < -2.196597309232865e-301

    1. Initial program 31.4

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

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

    if 120904531.49476463 < re

    1. Initial program 40.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.63184584490692683811764236696495705145 \cdot 10^{112}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -5.08697951464219784890620928937007113919 \cdot 10^{-205}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -2.196597309232864908492796515168661297752 \cdot 10^{-301}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 120904531.494764626026153564453125:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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