Average Error: 31.9 → 17.6
Time: 1.9s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -8.184754974022721082099165272992085068412 \cdot 10^{109}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -5.42865480404631814383011665150633500318 \cdot 10^{-185}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -1.794325950546430591123187005439756959047 \cdot 10^{-210}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le 4.941794989955851304909697931543184438921 \cdot 10^{75}:\\ \;\;\;\;\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 -8.184754974022721082099165272992085068412 \cdot 10^{109}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\

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

\mathbf{elif}\;re \le -1.794325950546430591123187005439756959047 \cdot 10^{-210}:\\
\;\;\;\;\log \left(-1 \cdot re\right)\\

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

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

\end{array}
double f(double re, double im) {
        double r34702 = re;
        double r34703 = r34702 * r34702;
        double r34704 = im;
        double r34705 = r34704 * r34704;
        double r34706 = r34703 + r34705;
        double r34707 = sqrt(r34706);
        double r34708 = log(r34707);
        return r34708;
}

double f(double re, double im) {
        double r34709 = re;
        double r34710 = -8.184754974022721e+109;
        bool r34711 = r34709 <= r34710;
        double r34712 = -1.0;
        double r34713 = r34712 * r34709;
        double r34714 = log(r34713);
        double r34715 = -5.428654804046318e-185;
        bool r34716 = r34709 <= r34715;
        double r34717 = r34709 * r34709;
        double r34718 = im;
        double r34719 = r34718 * r34718;
        double r34720 = r34717 + r34719;
        double r34721 = sqrt(r34720);
        double r34722 = log(r34721);
        double r34723 = -1.7943259505464306e-210;
        bool r34724 = r34709 <= r34723;
        double r34725 = 4.941794989955851e+75;
        bool r34726 = r34709 <= r34725;
        double r34727 = log(r34709);
        double r34728 = r34726 ? r34722 : r34727;
        double r34729 = r34724 ? r34714 : r34728;
        double r34730 = r34716 ? r34722 : r34729;
        double r34731 = r34711 ? r34714 : r34730;
        return r34731;
}

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 3 regimes
  2. if re < -8.184754974022721e+109 or -5.428654804046318e-185 < re < -1.7943259505464306e-210

    1. Initial program 52.1

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

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

    if -8.184754974022721e+109 < re < -5.428654804046318e-185 or -1.7943259505464306e-210 < re < 4.941794989955851e+75

    1. Initial program 21.5

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

    if 4.941794989955851e+75 < re

    1. Initial program 48.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -8.184754974022721082099165272992085068412 \cdot 10^{109}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le -5.42865480404631814383011665150633500318 \cdot 10^{-185}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le -1.794325950546430591123187005439756959047 \cdot 10^{-210}:\\ \;\;\;\;\log \left(-1 \cdot re\right)\\ \mathbf{elif}\;re \le 4.941794989955851304909697931543184438921 \cdot 10^{75}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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