Average Error: 31.2 → 17.5
Time: 1.3m
Precision: 64
\[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
\[\begin{array}{l} \mathbf{if}\;im \le -5.1187602451003614 \cdot 10^{+126}:\\ \;\;\;\;\frac{1}{\log base} \cdot \log \left(-re\right)\\ \mathbf{elif}\;im \le -1.4887735722677587 \cdot 10^{-107}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\ \mathbf{elif}\;im \le 5.8639778196245494 \cdot 10^{-64}:\\ \;\;\;\;\frac{\log \left(-re\right)}{\log base}\\ \mathbf{elif}\;im \le 2.2773753066549283 \cdot 10^{+101}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log im}{\log base}\\ \end{array}\]
\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}
\begin{array}{l}
\mathbf{if}\;im \le -5.1187602451003614 \cdot 10^{+126}:\\
\;\;\;\;\frac{1}{\log base} \cdot \log \left(-re\right)\\

\mathbf{elif}\;im \le -1.4887735722677587 \cdot 10^{-107}:\\
\;\;\;\;\frac{1}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\

\mathbf{elif}\;im \le 5.8639778196245494 \cdot 10^{-64}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\

\mathbf{elif}\;im \le 2.2773753066549283 \cdot 10^{+101}:\\
\;\;\;\;\frac{1}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\

\mathbf{else}:\\
\;\;\;\;\frac{\log im}{\log base}\\

\end{array}
double f(double re, double im, double base) {
        double r2154336 = re;
        double r2154337 = r2154336 * r2154336;
        double r2154338 = im;
        double r2154339 = r2154338 * r2154338;
        double r2154340 = r2154337 + r2154339;
        double r2154341 = sqrt(r2154340);
        double r2154342 = log(r2154341);
        double r2154343 = base;
        double r2154344 = log(r2154343);
        double r2154345 = r2154342 * r2154344;
        double r2154346 = atan2(r2154338, r2154336);
        double r2154347 = 0.0;
        double r2154348 = r2154346 * r2154347;
        double r2154349 = r2154345 + r2154348;
        double r2154350 = r2154344 * r2154344;
        double r2154351 = r2154347 * r2154347;
        double r2154352 = r2154350 + r2154351;
        double r2154353 = r2154349 / r2154352;
        return r2154353;
}

double f(double re, double im, double base) {
        double r2154354 = im;
        double r2154355 = -5.1187602451003614e+126;
        bool r2154356 = r2154354 <= r2154355;
        double r2154357 = 1.0;
        double r2154358 = base;
        double r2154359 = log(r2154358);
        double r2154360 = r2154357 / r2154359;
        double r2154361 = re;
        double r2154362 = -r2154361;
        double r2154363 = log(r2154362);
        double r2154364 = r2154360 * r2154363;
        double r2154365 = -1.4887735722677587e-107;
        bool r2154366 = r2154354 <= r2154365;
        double r2154367 = r2154361 * r2154361;
        double r2154368 = r2154354 * r2154354;
        double r2154369 = r2154367 + r2154368;
        double r2154370 = sqrt(r2154369);
        double r2154371 = log(r2154370);
        double r2154372 = r2154359 / r2154371;
        double r2154373 = r2154357 / r2154372;
        double r2154374 = 5.8639778196245494e-64;
        bool r2154375 = r2154354 <= r2154374;
        double r2154376 = r2154363 / r2154359;
        double r2154377 = 2.2773753066549283e+101;
        bool r2154378 = r2154354 <= r2154377;
        double r2154379 = log(r2154354);
        double r2154380 = r2154379 / r2154359;
        double r2154381 = r2154378 ? r2154373 : r2154380;
        double r2154382 = r2154375 ? r2154376 : r2154381;
        double r2154383 = r2154366 ? r2154373 : r2154382;
        double r2154384 = r2154356 ? r2154364 : r2154383;
        return r2154384;
}

Error

Bits error versus re

Bits error versus im

Bits error versus base

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 4 regimes
  2. if im < -5.1187602451003614e+126

    1. Initial program 55.8

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified55.8

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Taylor expanded around -inf 50.6

      \[\leadsto \frac{\log \color{blue}{\left(-1 \cdot re\right)} \cdot \log base}{\log base \cdot \log base}\]
    4. Simplified50.6

      \[\leadsto \frac{\log \color{blue}{\left(-re\right)} \cdot \log base}{\log base \cdot \log base}\]
    5. Using strategy rm
    6. Applied div-inv50.6

      \[\leadsto \color{blue}{\left(\log \left(-re\right) \cdot \log base\right) \cdot \frac{1}{\log base \cdot \log base}}\]
    7. Using strategy rm
    8. Applied associate-*l*50.6

      \[\leadsto \color{blue}{\log \left(-re\right) \cdot \left(\log base \cdot \frac{1}{\log base \cdot \log base}\right)}\]
    9. Simplified50.6

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

    if -5.1187602451003614e+126 < im < -1.4887735722677587e-107 or 5.8639778196245494e-64 < im < 2.2773753066549283e+101

    1. Initial program 16.4

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified16.4

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Using strategy rm
    4. Applied clear-num16.5

      \[\leadsto \color{blue}{\frac{1}{\frac{\log base \cdot \log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}}}\]
    5. Simplified16.4

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

    if -1.4887735722677587e-107 < im < 5.8639778196245494e-64

    1. Initial program 25.3

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified25.3

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Taylor expanded around -inf 8.9

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

      \[\leadsto \frac{\log \color{blue}{\left(-re\right)} \cdot \log base}{\log base \cdot \log base}\]
    5. Using strategy rm
    6. Applied associate-/r*8.8

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

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

    if 2.2773753066549283e+101 < im

    1. Initial program 50.9

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified50.9

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Taylor expanded around 0 9.3

      \[\leadsto \color{blue}{\frac{\log im}{\log base}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification17.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -5.1187602451003614 \cdot 10^{+126}:\\ \;\;\;\;\frac{1}{\log base} \cdot \log \left(-re\right)\\ \mathbf{elif}\;im \le -1.4887735722677587 \cdot 10^{-107}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\ \mathbf{elif}\;im \le 5.8639778196245494 \cdot 10^{-64}:\\ \;\;\;\;\frac{\log \left(-re\right)}{\log base}\\ \mathbf{elif}\;im \le 2.2773753066549283 \cdot 10^{+101}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log im}{\log base}\\ \end{array}\]

Reproduce

herbie shell --seed 2019130 
(FPCore (re im base)
  :name "math.log/2 on complex, real part"
  (/ (+ (* (log (sqrt (+ (* re re) (* im im)))) (log base)) (* (atan2 im re) 0)) (+ (* (log base) (log base)) (* 0 0))))