Average Error: 32.1 → 17.8
Time: 3.8s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -44144913.1003666148:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le 5.7520550571681611 \cdot 10^{125}:\\ \;\;\;\;\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 -44144913.1003666148:\\
\;\;\;\;\log \left(-re\right)\\

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

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

\end{array}
double f(double re, double im) {
        double r35467 = re;
        double r35468 = r35467 * r35467;
        double r35469 = im;
        double r35470 = r35469 * r35469;
        double r35471 = r35468 + r35470;
        double r35472 = sqrt(r35471);
        double r35473 = log(r35472);
        return r35473;
}

double f(double re, double im) {
        double r35474 = re;
        double r35475 = -44144913.100366615;
        bool r35476 = r35474 <= r35475;
        double r35477 = -r35474;
        double r35478 = log(r35477);
        double r35479 = 5.752055057168161e+125;
        bool r35480 = r35474 <= r35479;
        double r35481 = r35474 * r35474;
        double r35482 = im;
        double r35483 = r35482 * r35482;
        double r35484 = r35481 + r35483;
        double r35485 = sqrt(r35484);
        double r35486 = log(r35485);
        double r35487 = log(r35474);
        double r35488 = r35480 ? r35486 : r35487;
        double r35489 = r35476 ? r35478 : r35488;
        return r35489;
}

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

    1. Initial program 41.6

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

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

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

    if -44144913.100366615 < re < 5.752055057168161e+125

    1. Initial program 22.3

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

    if 5.752055057168161e+125 < re

    1. Initial program 56.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -44144913.1003666148:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le 5.7520550571681611 \cdot 10^{125}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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