Average Error: 32.2 → 17.6
Time: 1.2s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -3.859463483918923369547260927451545843966 \cdot 10^{84}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -1.167098834567443703136578031923709302405 \cdot 10^{-290}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 3.812412734570747037549119511317842097867 \cdot 10^{-267}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 1520535341655445535810607142928115832979000:\\ \;\;\;\;\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 -3.859463483918923369547260927451545843966 \cdot 10^{84}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\

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

\mathbf{elif}\;re \le 3.812412734570747037549119511317842097867 \cdot 10^{-267}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r29764 = re;
        double r29765 = r29764 * r29764;
        double r29766 = im;
        double r29767 = r29766 * r29766;
        double r29768 = r29765 + r29767;
        double r29769 = sqrt(r29768);
        double r29770 = log(r29769);
        return r29770;
}

double f(double re, double im) {
        double r29771 = re;
        double r29772 = -3.8594634839189234e+84;
        bool r29773 = r29771 <= r29772;
        double r29774 = -1.0;
        double r29775 = r29774 * r29771;
        double r29776 = log(r29775);
        double r29777 = -1.1670988345674437e-290;
        bool r29778 = r29771 <= r29777;
        double r29779 = r29771 * r29771;
        double r29780 = im;
        double r29781 = r29780 * r29780;
        double r29782 = r29779 + r29781;
        double r29783 = sqrt(r29782);
        double r29784 = log(r29783);
        double r29785 = 3.812412734570747e-267;
        bool r29786 = r29771 <= r29785;
        double r29787 = log(r29780);
        double r29788 = 1.5205353416554455e+42;
        bool r29789 = r29771 <= r29788;
        double r29790 = log(r29771);
        double r29791 = r29789 ? r29784 : r29790;
        double r29792 = r29786 ? r29787 : r29791;
        double r29793 = r29778 ? r29784 : r29792;
        double r29794 = r29773 ? r29776 : r29793;
        return r29794;
}

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 < -3.8594634839189234e+84

    1. Initial program 49.9

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

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

    if -3.8594634839189234e+84 < re < -1.1670988345674437e-290 or 3.812412734570747e-267 < re < 1.5205353416554455e+42

    1. Initial program 21.5

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

    if -1.1670988345674437e-290 < re < 3.812412734570747e-267

    1. Initial program 30.3

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

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

    if 1.5205353416554455e+42 < re

    1. Initial program 45.6

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.859463483918923369547260927451545843966 \cdot 10^{84}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -1.167098834567443703136578031923709302405 \cdot 10^{-290}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 3.812412734570747037549119511317842097867 \cdot 10^{-267}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 1520535341655445535810607142928115832979000:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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