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 r82268 = re;
        double r82269 = r82268 * r82268;
        double r82270 = im;
        double r82271 = r82270 * r82270;
        double r82272 = r82269 + r82271;
        double r82273 = sqrt(r82272);
        double r82274 = log(r82273);
        return r82274;
}

double f(double re, double im) {
        double r82275 = re;
        double r82276 = -5.543624575485825e+99;
        bool r82277 = r82275 <= r82276;
        double r82278 = -1.0;
        double r82279 = r82278 * r82275;
        double r82280 = log(r82279);
        double r82281 = -1.8506630449800765e-210;
        bool r82282 = r82275 <= r82281;
        double r82283 = r82275 * r82275;
        double r82284 = im;
        double r82285 = r82284 * r82284;
        double r82286 = r82283 + r82285;
        double r82287 = sqrt(r82286);
        double r82288 = log(r82287);
        double r82289 = 2.6951869124740155e-166;
        bool r82290 = r82275 <= r82289;
        double r82291 = log(r82284);
        double r82292 = 4.8072428149772244e+120;
        bool r82293 = r82275 <= r82292;
        double r82294 = log(r82275);
        double r82295 = r82293 ? r82288 : r82294;
        double r82296 = r82290 ? r82291 : r82295;
        double r82297 = r82282 ? r82288 : r82296;
        double r82298 = r82277 ? r82280 : r82297;
        return r82298;
}

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)))))