Average Error: 32.8 → 17.6
Time: 1.4m
Precision: 64
\[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
\[\begin{array}{l} \mathbf{if}\;re \le -1.038377890163373031226407676473996374442 \cdot 10^{105}:\\ \;\;\;\;-\frac{\log \left(\frac{-1}{re}\right)}{\log base}\\ \mathbf{elif}\;re \le -5.466683203640612131523745400056625038937 \cdot 10^{-192}:\\ \;\;\;\;\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + 0.0 \cdot \tan^{-1}_* \frac{im}{re}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \mathbf{elif}\;re \le 8.706440568089371297402288589381159059454 \cdot 10^{-287}:\\ \;\;\;\;\frac{\log im}{\log base}\\ \mathbf{elif}\;re \le 1.336901952420293660317523855842402518014 \cdot 10^{126}:\\ \;\;\;\;\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + 0.0 \cdot \tan^{-1}_* \frac{im}{re}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-\log re}{-\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.0}{\log base \cdot \log base + 0.0 \cdot 0.0}
\begin{array}{l}
\mathbf{if}\;re \le -1.038377890163373031226407676473996374442 \cdot 10^{105}:\\
\;\;\;\;-\frac{\log \left(\frac{-1}{re}\right)}{\log base}\\

\mathbf{elif}\;re \le -5.466683203640612131523745400056625038937 \cdot 10^{-192}:\\
\;\;\;\;\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + 0.0 \cdot \tan^{-1}_* \frac{im}{re}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\

\mathbf{elif}\;re \le 8.706440568089371297402288589381159059454 \cdot 10^{-287}:\\
\;\;\;\;\frac{\log im}{\log base}\\

\mathbf{elif}\;re \le 1.336901952420293660317523855842402518014 \cdot 10^{126}:\\
\;\;\;\;\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + 0.0 \cdot \tan^{-1}_* \frac{im}{re}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\

\mathbf{else}:\\
\;\;\;\;\frac{-\log re}{-\log base}\\

\end{array}
double f(double re, double im, double base) {
        double r2907514 = re;
        double r2907515 = r2907514 * r2907514;
        double r2907516 = im;
        double r2907517 = r2907516 * r2907516;
        double r2907518 = r2907515 + r2907517;
        double r2907519 = sqrt(r2907518);
        double r2907520 = log(r2907519);
        double r2907521 = base;
        double r2907522 = log(r2907521);
        double r2907523 = r2907520 * r2907522;
        double r2907524 = atan2(r2907516, r2907514);
        double r2907525 = 0.0;
        double r2907526 = r2907524 * r2907525;
        double r2907527 = r2907523 + r2907526;
        double r2907528 = r2907522 * r2907522;
        double r2907529 = r2907525 * r2907525;
        double r2907530 = r2907528 + r2907529;
        double r2907531 = r2907527 / r2907530;
        return r2907531;
}

double f(double re, double im, double base) {
        double r2907532 = re;
        double r2907533 = -1.038377890163373e+105;
        bool r2907534 = r2907532 <= r2907533;
        double r2907535 = -1.0;
        double r2907536 = r2907535 / r2907532;
        double r2907537 = log(r2907536);
        double r2907538 = base;
        double r2907539 = log(r2907538);
        double r2907540 = r2907537 / r2907539;
        double r2907541 = -r2907540;
        double r2907542 = -5.466683203640612e-192;
        bool r2907543 = r2907532 <= r2907542;
        double r2907544 = r2907532 * r2907532;
        double r2907545 = im;
        double r2907546 = r2907545 * r2907545;
        double r2907547 = r2907544 + r2907546;
        double r2907548 = sqrt(r2907547);
        double r2907549 = log(r2907548);
        double r2907550 = r2907549 * r2907539;
        double r2907551 = 0.0;
        double r2907552 = atan2(r2907545, r2907532);
        double r2907553 = r2907551 * r2907552;
        double r2907554 = r2907550 + r2907553;
        double r2907555 = r2907539 * r2907539;
        double r2907556 = r2907551 * r2907551;
        double r2907557 = r2907555 + r2907556;
        double r2907558 = sqrt(r2907557);
        double r2907559 = r2907554 / r2907558;
        double r2907560 = r2907559 / r2907558;
        double r2907561 = 8.706440568089371e-287;
        bool r2907562 = r2907532 <= r2907561;
        double r2907563 = log(r2907545);
        double r2907564 = r2907563 / r2907539;
        double r2907565 = 1.3369019524202937e+126;
        bool r2907566 = r2907532 <= r2907565;
        double r2907567 = log(r2907532);
        double r2907568 = -r2907567;
        double r2907569 = -r2907539;
        double r2907570 = r2907568 / r2907569;
        double r2907571 = r2907566 ? r2907560 : r2907570;
        double r2907572 = r2907562 ? r2907564 : r2907571;
        double r2907573 = r2907543 ? r2907560 : r2907572;
        double r2907574 = r2907534 ? r2907541 : r2907573;
        return r2907574;
}

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 re < -1.038377890163373e+105

    1. Initial program 52.9

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
    2. Using strategy rm
    3. Applied div-inv52.9

      \[\leadsto \color{blue}{\left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \frac{1}{\log base \cdot \log base + 0.0 \cdot 0.0}}\]
    4. Taylor expanded around -inf 64.0

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

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

    if -1.038377890163373e+105 < re < -5.466683203640612e-192 or 8.706440568089371e-287 < re < 1.3369019524202937e+126

    1. Initial program 19.8

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt19.8

      \[\leadsto \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\color{blue}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0} \cdot \sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}\]
    4. Applied associate-/r*19.8

      \[\leadsto \color{blue}{\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}\]

    if -5.466683203640612e-192 < re < 8.706440568089371e-287

    1. Initial program 33.2

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
    2. Taylor expanded around 0 33.0

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

    if 1.3369019524202937e+126 < re

    1. Initial program 57.8

      \[\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
    2. Using strategy rm
    3. Applied div-inv57.8

      \[\leadsto \color{blue}{\left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \frac{1}{\log base \cdot \log base + 0.0 \cdot 0.0}}\]
    4. Taylor expanded around inf 8.2

      \[\leadsto \color{blue}{\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}}\]
    5. Simplified8.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.038377890163373031226407676473996374442 \cdot 10^{105}:\\ \;\;\;\;-\frac{\log \left(\frac{-1}{re}\right)}{\log base}\\ \mathbf{elif}\;re \le -5.466683203640612131523745400056625038937 \cdot 10^{-192}:\\ \;\;\;\;\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + 0.0 \cdot \tan^{-1}_* \frac{im}{re}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \mathbf{elif}\;re \le 8.706440568089371297402288589381159059454 \cdot 10^{-287}:\\ \;\;\;\;\frac{\log im}{\log base}\\ \mathbf{elif}\;re \le 1.336901952420293660317523855842402518014 \cdot 10^{126}:\\ \;\;\;\;\frac{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + 0.0 \cdot \tan^{-1}_* \frac{im}{re}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-\log re}{-\log base}\\ \end{array}\]

Reproduce

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