Average Error: 31.3 → 17.1
Time: 25.2s
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}\;re \le -2.4760769569314187 \cdot 10^{+145}:\\ \;\;\;\;\frac{\tan^{-1}_* \frac{im}{re} \cdot 0 + \log base \cdot \log \left(-re\right)}{\log base \cdot \log base}\\ \mathbf{elif}\;re \le 2.800497127464075 \cdot 10^{+120}:\\ \;\;\;\;\frac{\log base \cdot \log \left(\left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right)}{\left|\log base\right|} \cdot \frac{1}{\sqrt{\log base \cdot \log base}}\\ \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}{\log base \cdot \log base + 0 \cdot 0}
\begin{array}{l}
\mathbf{if}\;re \le -2.4760769569314187 \cdot 10^{+145}:\\
\;\;\;\;\frac{\tan^{-1}_* \frac{im}{re} \cdot 0 + \log base \cdot \log \left(-re\right)}{\log base \cdot \log base}\\

\mathbf{elif}\;re \le 2.800497127464075 \cdot 10^{+120}:\\
\;\;\;\;\frac{\log base \cdot \log \left(\left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right)}{\left|\log base\right|} \cdot \frac{1}{\sqrt{\log base \cdot \log base}}\\

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

\end{array}
double f(double re, double im, double base) {
        double r1873436 = re;
        double r1873437 = r1873436 * r1873436;
        double r1873438 = im;
        double r1873439 = r1873438 * r1873438;
        double r1873440 = r1873437 + r1873439;
        double r1873441 = sqrt(r1873440);
        double r1873442 = log(r1873441);
        double r1873443 = base;
        double r1873444 = log(r1873443);
        double r1873445 = r1873442 * r1873444;
        double r1873446 = atan2(r1873438, r1873436);
        double r1873447 = 0.0;
        double r1873448 = r1873446 * r1873447;
        double r1873449 = r1873445 + r1873448;
        double r1873450 = r1873444 * r1873444;
        double r1873451 = r1873447 * r1873447;
        double r1873452 = r1873450 + r1873451;
        double r1873453 = r1873449 / r1873452;
        return r1873453;
}

double f(double re, double im, double base) {
        double r1873454 = re;
        double r1873455 = -2.4760769569314187e+145;
        bool r1873456 = r1873454 <= r1873455;
        double r1873457 = im;
        double r1873458 = atan2(r1873457, r1873454);
        double r1873459 = 0.0;
        double r1873460 = r1873458 * r1873459;
        double r1873461 = base;
        double r1873462 = log(r1873461);
        double r1873463 = -r1873454;
        double r1873464 = log(r1873463);
        double r1873465 = r1873462 * r1873464;
        double r1873466 = r1873460 + r1873465;
        double r1873467 = r1873462 * r1873462;
        double r1873468 = r1873466 / r1873467;
        double r1873469 = 2.800497127464075e+120;
        bool r1873470 = r1873454 <= r1873469;
        double r1873471 = r1873457 * r1873457;
        double r1873472 = r1873454 * r1873454;
        double r1873473 = r1873471 + r1873472;
        double r1873474 = sqrt(r1873473);
        double r1873475 = cbrt(r1873474);
        double r1873476 = r1873475 * r1873475;
        double r1873477 = r1873476 * r1873475;
        double r1873478 = log(r1873477);
        double r1873479 = r1873462 * r1873478;
        double r1873480 = fabs(r1873462);
        double r1873481 = r1873479 / r1873480;
        double r1873482 = 1.0;
        double r1873483 = sqrt(r1873467);
        double r1873484 = r1873482 / r1873483;
        double r1873485 = r1873481 * r1873484;
        double r1873486 = log(r1873454);
        double r1873487 = -r1873486;
        double r1873488 = -r1873462;
        double r1873489 = r1873487 / r1873488;
        double r1873490 = r1873470 ? r1873485 : r1873489;
        double r1873491 = r1873456 ? r1873468 : r1873490;
        return r1873491;
}

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 3 regimes
  2. if re < -2.4760769569314187e+145

    1. Initial program 59.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. Taylor expanded around -inf 6.6

      \[\leadsto \frac{\log \color{blue}{\left(-1 \cdot re\right)} \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\log base \cdot \log base + 0 \cdot 0}\]
    3. Simplified6.6

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

    if -2.4760769569314187e+145 < re < 2.800497127464075e+120

    1. Initial program 21.2

      \[\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. Using strategy rm
    3. Applied add-sqr-sqrt21.2

      \[\leadsto \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0}{\color{blue}{\sqrt{\log base \cdot \log base + 0 \cdot 0} \cdot \sqrt{\log base \cdot \log base + 0 \cdot 0}}}\]
    4. Applied *-un-lft-identity21.2

      \[\leadsto \frac{\color{blue}{1 \cdot \left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0\right)}}{\sqrt{\log base \cdot \log base + 0 \cdot 0} \cdot \sqrt{\log base \cdot \log base + 0 \cdot 0}}\]
    5. Applied times-frac21.2

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

      \[\leadsto \frac{1}{\sqrt{\log base \cdot \log base + 0 \cdot 0}} \cdot \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\left|\log base\right|}}\]
    7. Using strategy rm
    8. Applied add-cube-cbrt21.2

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

    if 2.800497127464075e+120 < re

    1. Initial program 53.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. Taylor expanded around inf 7.8

      \[\leadsto \color{blue}{\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}}\]
    3. Simplified7.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.4760769569314187 \cdot 10^{+145}:\\ \;\;\;\;\frac{\tan^{-1}_* \frac{im}{re} \cdot 0 + \log base \cdot \log \left(-re\right)}{\log base \cdot \log base}\\ \mathbf{elif}\;re \le 2.800497127464075 \cdot 10^{+120}:\\ \;\;\;\;\frac{\log base \cdot \log \left(\left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right)}{\left|\log base\right|} \cdot \frac{1}{\sqrt{\log base \cdot \log base}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-\log re}{-\log base}\\ \end{array}\]

Reproduce

herbie shell --seed 2019165 
(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))))