Average Error: 31.6 → 17.1
Time: 7.8s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -2.0142287793804751 \cdot 10^{118}:\\ \;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \log \left(\frac{-1}{re}\right)\right)\\ \mathbf{elif}\;re \le 6.23122095692666968 \cdot 10^{141}:\\ \;\;\;\;\frac{1}{2} \cdot \log \left(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.0142287793804751 \cdot 10^{118}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \log \left(\frac{-1}{re}\right)\right)\\

\mathbf{elif}\;re \le 6.23122095692666968 \cdot 10^{141}:\\
\;\;\;\;\frac{1}{2} \cdot \log \left(re \cdot re + im \cdot im\right)\\

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

\end{array}
double f(double re, double im) {
        double r61503 = re;
        double r61504 = r61503 * r61503;
        double r61505 = im;
        double r61506 = r61505 * r61505;
        double r61507 = r61504 + r61506;
        double r61508 = sqrt(r61507);
        double r61509 = log(r61508);
        return r61509;
}

double f(double re, double im) {
        double r61510 = re;
        double r61511 = -2.0142287793804751e+118;
        bool r61512 = r61510 <= r61511;
        double r61513 = 1.0;
        double r61514 = 2.0;
        double r61515 = r61513 / r61514;
        double r61516 = -2.0;
        double r61517 = -1.0;
        double r61518 = r61517 / r61510;
        double r61519 = log(r61518);
        double r61520 = r61516 * r61519;
        double r61521 = r61515 * r61520;
        double r61522 = 6.23122095692667e+141;
        bool r61523 = r61510 <= r61522;
        double r61524 = r61510 * r61510;
        double r61525 = im;
        double r61526 = r61525 * r61525;
        double r61527 = r61524 + r61526;
        double r61528 = log(r61527);
        double r61529 = r61515 * r61528;
        double r61530 = log(r61510);
        double r61531 = r61523 ? r61529 : r61530;
        double r61532 = r61512 ? r61521 : r61531;
        return r61532;
}

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 < -2.0142287793804751e+118

    1. Initial program 55.0

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
    2. Using strategy rm
    3. Applied pow155.0

      \[\leadsto \log \left(\sqrt{\color{blue}{{\left(re \cdot re + im \cdot im\right)}^{1}}}\right)\]
    4. Applied sqrt-pow155.0

      \[\leadsto \log \color{blue}{\left({\left(re \cdot re + im \cdot im\right)}^{\left(\frac{1}{2}\right)}\right)}\]
    5. Applied log-pow55.0

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \log \left(re \cdot re + im \cdot im\right)}\]
    6. Taylor expanded around -inf 8.4

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(-2 \cdot \log \left(\frac{-1}{re}\right)\right)}\]
    7. Simplified8.4

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

    if -2.0142287793804751e+118 < re < 6.23122095692667e+141

    1. Initial program 20.9

      \[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
    2. Using strategy rm
    3. Applied pow120.9

      \[\leadsto \log \left(\sqrt{\color{blue}{{\left(re \cdot re + im \cdot im\right)}^{1}}}\right)\]
    4. Applied sqrt-pow120.9

      \[\leadsto \log \color{blue}{\left({\left(re \cdot re + im \cdot im\right)}^{\left(\frac{1}{2}\right)}\right)}\]
    5. Applied log-pow20.9

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \log \left(re \cdot re + im \cdot im\right)}\]

    if 6.23122095692667e+141 < re

    1. Initial program 60.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.0142287793804751 \cdot 10^{118}:\\ \;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \log \left(\frac{-1}{re}\right)\right)\\ \mathbf{elif}\;re \le 6.23122095692666968 \cdot 10^{141}:\\ \;\;\;\;\frac{1}{2} \cdot \log \left(re \cdot re + im \cdot im\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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