Average Error: 31.0 → 16.9
Time: 3.5s
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 r42337 = re;
        double r42338 = r42337 * r42337;
        double r42339 = im;
        double r42340 = r42339 * r42339;
        double r42341 = r42338 + r42340;
        double r42342 = sqrt(r42341);
        double r42343 = log(r42342);
        return r42343;
}

double f(double re, double im) {
        double r42344 = re;
        double r42345 = -9.850726757232305e+116;
        bool r42346 = r42344 <= r42345;
        double r42347 = -r42344;
        double r42348 = log(r42347);
        double r42349 = 9.282772713307498e+30;
        bool r42350 = r42344 <= r42349;
        double r42351 = im;
        double r42352 = r42351 * r42351;
        double r42353 = r42344 * r42344;
        double r42354 = r42352 + r42353;
        double r42355 = sqrt(r42354);
        double r42356 = log(r42355);
        double r42357 = log(r42344);
        double r42358 = r42350 ? r42356 : r42357;
        double r42359 = r42346 ? r42348 : r42358;
        return r42359;
}

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