Average Error: 31.8 → 17.4
Time: 1.3s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -5.543624575485825300470836787098407507184 \cdot 10^{99}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -1.85066304498007646559295186368455547267 \cdot 10^{-210}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 2.695186912474015462769700121112449872029 \cdot 10^{-166}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 4.807242814977224375325896090190360016547 \cdot 10^{120}:\\ \;\;\;\;\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 -5.543624575485825300470836787098407507184 \cdot 10^{99}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\

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

\mathbf{elif}\;re \le 2.695186912474015462769700121112449872029 \cdot 10^{-166}:\\
\;\;\;\;\log im\\

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

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

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

double f(double re, double im) {
        double r29770 = re;
        double r29771 = -5.543624575485825e+99;
        bool r29772 = r29770 <= r29771;
        double r29773 = -1.0;
        double r29774 = r29773 * r29770;
        double r29775 = log(r29774);
        double r29776 = -1.8506630449800765e-210;
        bool r29777 = r29770 <= r29776;
        double r29778 = r29770 * r29770;
        double r29779 = im;
        double r29780 = r29779 * r29779;
        double r29781 = r29778 + r29780;
        double r29782 = sqrt(r29781);
        double r29783 = log(r29782);
        double r29784 = 2.6951869124740155e-166;
        bool r29785 = r29770 <= r29784;
        double r29786 = log(r29779);
        double r29787 = 4.8072428149772244e+120;
        bool r29788 = r29770 <= r29787;
        double r29789 = log(r29770);
        double r29790 = r29788 ? r29783 : r29789;
        double r29791 = r29785 ? r29786 : r29790;
        double r29792 = r29777 ? r29783 : r29791;
        double r29793 = r29772 ? r29775 : r29792;
        return r29793;
}

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 < -5.543624575485825e+99

    1. Initial program 50.7

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

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

    if -5.543624575485825e+99 < re < -1.8506630449800765e-210 or 2.6951869124740155e-166 < re < 4.8072428149772244e+120

    1. Initial program 16.9

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

    if -1.8506630449800765e-210 < re < 2.6951869124740155e-166

    1. Initial program 31.9

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

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

    if 4.8072428149772244e+120 < re

    1. Initial program 55.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -5.543624575485825300470836787098407507184 \cdot 10^{99}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -1.85066304498007646559295186368455547267 \cdot 10^{-210}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 2.695186912474015462769700121112449872029 \cdot 10^{-166}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 4.807242814977224375325896090190360016547 \cdot 10^{120}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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