Average Error: 32.1 → 17.6
Time: 7.4s
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.7042958239457753 \cdot 10^{88}:\\ \;\;\;\;\frac{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\\ \mathbf{elif}\;re \le 7.9040050084905754 \cdot 10^{120}:\\ \;\;\;\;\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\left(\log base \cdot \left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) + \log base \cdot \log \left(\sqrt[3]{base}\right)\right) + 0.0 \cdot 0.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}\\ \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.7042958239457753 \cdot 10^{88}:\\
\;\;\;\;\frac{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\\

\mathbf{elif}\;re \le 7.9040050084905754 \cdot 10^{120}:\\
\;\;\;\;\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\left(\log base \cdot \left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) + \log base \cdot \log \left(\sqrt[3]{base}\right)\right) + 0.0 \cdot 0.0}\\

\mathbf{else}:\\
\;\;\;\;\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}\\

\end{array}
double f(double re, double im, double base) {
        double r49971 = re;
        double r49972 = r49971 * r49971;
        double r49973 = im;
        double r49974 = r49973 * r49973;
        double r49975 = r49972 + r49974;
        double r49976 = sqrt(r49975);
        double r49977 = log(r49976);
        double r49978 = base;
        double r49979 = log(r49978);
        double r49980 = r49977 * r49979;
        double r49981 = atan2(r49973, r49971);
        double r49982 = 0.0;
        double r49983 = r49981 * r49982;
        double r49984 = r49980 + r49983;
        double r49985 = r49979 * r49979;
        double r49986 = r49982 * r49982;
        double r49987 = r49985 + r49986;
        double r49988 = r49984 / r49987;
        return r49988;
}

double f(double re, double im, double base) {
        double r49989 = re;
        double r49990 = -1.7042958239457753e+88;
        bool r49991 = r49989 <= r49990;
        double r49992 = -1.0;
        double r49993 = r49992 * r49989;
        double r49994 = log(r49993);
        double r49995 = base;
        double r49996 = log(r49995);
        double r49997 = r49994 * r49996;
        double r49998 = im;
        double r49999 = atan2(r49998, r49989);
        double r50000 = 0.0;
        double r50001 = r49999 * r50000;
        double r50002 = r49997 + r50001;
        double r50003 = r49996 * r49996;
        double r50004 = r50000 * r50000;
        double r50005 = r50003 + r50004;
        double r50006 = r50002 / r50005;
        double r50007 = 7.904005008490575e+120;
        bool r50008 = r49989 <= r50007;
        double r50009 = r49989 * r49989;
        double r50010 = r49998 * r49998;
        double r50011 = r50009 + r50010;
        double r50012 = sqrt(r50011);
        double r50013 = log(r50012);
        double r50014 = r50013 * r49996;
        double r50015 = r50014 + r50001;
        double r50016 = 2.0;
        double r50017 = cbrt(r49995);
        double r50018 = log(r50017);
        double r50019 = r50016 * r50018;
        double r50020 = r49996 * r50019;
        double r50021 = r49996 * r50018;
        double r50022 = r50020 + r50021;
        double r50023 = r50022 + r50004;
        double r50024 = r50015 / r50023;
        double r50025 = 1.0;
        double r50026 = r50025 / r49989;
        double r50027 = log(r50026);
        double r50028 = r50025 / r49995;
        double r50029 = log(r50028);
        double r50030 = r50027 / r50029;
        double r50031 = r50008 ? r50024 : r50030;
        double r50032 = r49991 ? r50006 : r50031;
        return r50032;
}

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 < -1.7042958239457753e+88

    1. Initial program 51.0

      \[\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 -inf 10.1

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

    if -1.7042958239457753e+88 < re < 7.904005008490575e+120

    1. Initial program 21.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-cube-cbrt21.8

      \[\leadsto \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 \color{blue}{\left(\left(\sqrt[3]{base} \cdot \sqrt[3]{base}\right) \cdot \sqrt[3]{base}\right)} + 0.0 \cdot 0.0}\]
    4. Applied log-prod21.8

      \[\leadsto \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 \color{blue}{\left(\log \left(\sqrt[3]{base} \cdot \sqrt[3]{base}\right) + \log \left(\sqrt[3]{base}\right)\right)} + 0.0 \cdot 0.0}\]
    5. Applied distribute-lft-in21.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}{\left(\log base \cdot \log \left(\sqrt[3]{base} \cdot \sqrt[3]{base}\right) + \log base \cdot \log \left(\sqrt[3]{base}\right)\right)} + 0.0 \cdot 0.0}\]
    6. Simplified21.8

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

    if 7.904005008490575e+120 < re

    1. Initial program 55.1

      \[\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 inf 7.7

      \[\leadsto \color{blue}{\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification17.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.7042958239457753 \cdot 10^{88}:\\ \;\;\;\;\frac{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\\ \mathbf{elif}\;re \le 7.9040050084905754 \cdot 10^{120}:\\ \;\;\;\;\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\left(\log base \cdot \left(2 \cdot \log \left(\sqrt[3]{base}\right)\right) + \log base \cdot \log \left(\sqrt[3]{base}\right)\right) + 0.0 \cdot 0.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}\\ \end{array}\]

Reproduce

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