Average Error: 32.5 → 17.8
Time: 2.6s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -4.1975508038006968 \cdot 10^{153}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -9.52817244882649108 \cdot 10^{-265}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 1.04745553524127593 \cdot 10^{-281}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 8.0421619395688348 \cdot 10^{92}:\\ \;\;\;\;\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 -4.1975508038006968 \cdot 10^{153}:\\
\;\;\;\;\log \left(-re\right)\\

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

\mathbf{elif}\;re \le 1.04745553524127593 \cdot 10^{-281}:\\
\;\;\;\;\log im\\

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

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

\end{array}
double f(double re, double im) {
        double r33225 = re;
        double r33226 = r33225 * r33225;
        double r33227 = im;
        double r33228 = r33227 * r33227;
        double r33229 = r33226 + r33228;
        double r33230 = sqrt(r33229);
        double r33231 = log(r33230);
        return r33231;
}

double f(double re, double im) {
        double r33232 = re;
        double r33233 = -4.197550803800697e+153;
        bool r33234 = r33232 <= r33233;
        double r33235 = -r33232;
        double r33236 = log(r33235);
        double r33237 = -9.528172448826491e-265;
        bool r33238 = r33232 <= r33237;
        double r33239 = r33232 * r33232;
        double r33240 = im;
        double r33241 = r33240 * r33240;
        double r33242 = r33239 + r33241;
        double r33243 = sqrt(r33242);
        double r33244 = log(r33243);
        double r33245 = 1.047455535241276e-281;
        bool r33246 = r33232 <= r33245;
        double r33247 = log(r33240);
        double r33248 = 8.042161939568835e+92;
        bool r33249 = r33232 <= r33248;
        double r33250 = log(r33232);
        double r33251 = r33249 ? r33244 : r33250;
        double r33252 = r33246 ? r33247 : r33251;
        double r33253 = r33238 ? r33244 : r33252;
        double r33254 = r33234 ? r33236 : r33253;
        return r33254;
}

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 < -4.197550803800697e+153

    1. Initial program 63.9

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

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

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

    if -4.197550803800697e+153 < re < -9.528172448826491e-265 or 1.047455535241276e-281 < re < 8.042161939568835e+92

    1. Initial program 21.3

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

    if -9.528172448826491e-265 < re < 1.047455535241276e-281

    1. Initial program 31.7

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

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

    if 8.042161939568835e+92 < re

    1. Initial program 50.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -4.1975508038006968 \cdot 10^{153}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le -9.52817244882649108 \cdot 10^{-265}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{elif}\;re \le 1.04745553524127593 \cdot 10^{-281}:\\ \;\;\;\;\log im\\ \mathbf{elif}\;re \le 8.0421619395688348 \cdot 10^{92}:\\ \;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]

Reproduce

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