Average Error: 31.0 → 16.9
Time: 3.3s
Precision: 64
\[\log \left(\sqrt{re \cdot re + im \cdot im}\right)\]
\[\begin{array}{l} \mathbf{if}\;re \le -9.850726757232304656097215039461175225007 \cdot 10^{116}:\\ \;\;\;\;\log \left(-re\right)\\ \mathbf{elif}\;re \le 9282772713307497733004856393728:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\ \mathbf{else}:\\ \;\;\;\;\log re\\ \end{array}\]
\log \left(\sqrt{re \cdot re + im \cdot im}\right)
\begin{array}{l}
\mathbf{if}\;re \le -9.850726757232304656097215039461175225007 \cdot 10^{116}:\\
\;\;\;\;\log \left(-re\right)\\

\mathbf{elif}\;re \le 9282772713307497733004856393728:\\
\;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right)\\

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

\end{array}
double f(double re, double im) {
        double r42150 = re;
        double r42151 = r42150 * r42150;
        double r42152 = im;
        double r42153 = r42152 * r42152;
        double r42154 = r42151 + r42153;
        double r42155 = sqrt(r42154);
        double r42156 = log(r42155);
        return r42156;
}

double f(double re, double im) {
        double r42157 = re;
        double r42158 = -9.850726757232305e+116;
        bool r42159 = r42157 <= r42158;
        double r42160 = -r42157;
        double r42161 = log(r42160);
        double r42162 = 9.282772713307498e+30;
        bool r42163 = r42157 <= r42162;
        double r42164 = im;
        double r42165 = r42164 * r42164;
        double r42166 = r42157 * r42157;
        double r42167 = r42165 + r42166;
        double r42168 = sqrt(r42167);
        double r42169 = log(r42168);
        double r42170 = log(r42157);
        double r42171 = r42163 ? r42169 : r42170;
        double r42172 = r42159 ? r42161 : r42171;
        return r42172;
}

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 < -9.850726757232305e+116

    1. Initial program 55.5

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

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

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

    if -9.850726757232305e+116 < re < 9.282772713307498e+30

    1. Initial program 21.0

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

    if 9.282772713307498e+30 < re

    1. Initial program 41.9

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

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

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

Reproduce

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