Average Error: 30.8 → 17.7
Time: 18.9s
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 -16436.105427898932:\\ \;\;\;\;\frac{\log \left(-re\right)}{\log base}\\ \mathbf{elif}\;re \le -2.289233214842376 \cdot 10^{-234}:\\ \;\;\;\;\frac{\log \left(\sqrt{im \cdot im + re \cdot re}\right) \cdot \log base + 0 \cdot \tan^{-1}_* \frac{im}{re}}{\log base \cdot \log base}\\ \mathbf{elif}\;re \le -1.7888060498818623 \cdot 10^{-307}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log base} \cdot \frac{\log base}{\log im}}\\ \mathbf{elif}\;re \le 1.923554289447892 \cdot 10^{+55}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log base} \cdot \frac{\log base}{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}}\\ \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 -16436.105427898932:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\

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

\mathbf{elif}\;re \le -1.7888060498818623 \cdot 10^{-307}:\\
\;\;\;\;\frac{1}{\frac{\log base}{\log base} \cdot \frac{\log base}{\log im}}\\

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

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

\end{array}
double f(double re, double im, double base) {
        double r1183017 = re;
        double r1183018 = r1183017 * r1183017;
        double r1183019 = im;
        double r1183020 = r1183019 * r1183019;
        double r1183021 = r1183018 + r1183020;
        double r1183022 = sqrt(r1183021);
        double r1183023 = log(r1183022);
        double r1183024 = base;
        double r1183025 = log(r1183024);
        double r1183026 = r1183023 * r1183025;
        double r1183027 = atan2(r1183019, r1183017);
        double r1183028 = 0.0;
        double r1183029 = r1183027 * r1183028;
        double r1183030 = r1183026 + r1183029;
        double r1183031 = r1183025 * r1183025;
        double r1183032 = r1183028 * r1183028;
        double r1183033 = r1183031 + r1183032;
        double r1183034 = r1183030 / r1183033;
        return r1183034;
}

double f(double re, double im, double base) {
        double r1183035 = re;
        double r1183036 = -16436.105427898932;
        bool r1183037 = r1183035 <= r1183036;
        double r1183038 = -r1183035;
        double r1183039 = log(r1183038);
        double r1183040 = base;
        double r1183041 = log(r1183040);
        double r1183042 = r1183039 / r1183041;
        double r1183043 = -2.289233214842376e-234;
        bool r1183044 = r1183035 <= r1183043;
        double r1183045 = im;
        double r1183046 = r1183045 * r1183045;
        double r1183047 = r1183035 * r1183035;
        double r1183048 = r1183046 + r1183047;
        double r1183049 = sqrt(r1183048);
        double r1183050 = log(r1183049);
        double r1183051 = r1183050 * r1183041;
        double r1183052 = 0.0;
        double r1183053 = atan2(r1183045, r1183035);
        double r1183054 = r1183052 * r1183053;
        double r1183055 = r1183051 + r1183054;
        double r1183056 = r1183041 * r1183041;
        double r1183057 = r1183055 / r1183056;
        double r1183058 = -1.7888060498818623e-307;
        bool r1183059 = r1183035 <= r1183058;
        double r1183060 = 1.0;
        double r1183061 = r1183041 / r1183041;
        double r1183062 = log(r1183045);
        double r1183063 = r1183041 / r1183062;
        double r1183064 = r1183061 * r1183063;
        double r1183065 = r1183060 / r1183064;
        double r1183066 = 1.923554289447892e+55;
        bool r1183067 = r1183035 <= r1183066;
        double r1183068 = r1183041 / r1183050;
        double r1183069 = r1183061 * r1183068;
        double r1183070 = r1183060 / r1183069;
        double r1183071 = log(r1183035);
        double r1183072 = r1183071 / r1183041;
        double r1183073 = r1183067 ? r1183070 : r1183072;
        double r1183074 = r1183059 ? r1183065 : r1183073;
        double r1183075 = r1183044 ? r1183057 : r1183074;
        double r1183076 = r1183037 ? r1183042 : r1183075;
        return r1183076;
}

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 5 regimes
  2. if re < -16436.105427898932

    1. Initial program 38.5

      \[\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. Simplified38.4

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

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

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

    if -16436.105427898932 < re < -2.289233214842376e-234

    1. Initial program 19.6

      \[\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}\]

    if -2.289233214842376e-234 < re < -1.7888060498818623e-307

    1. Initial program 30.7

      \[\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 clear-num30.8

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

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

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

    if -1.7888060498818623e-307 < re < 1.923554289447892e+55

    1. Initial program 22.1

      \[\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 clear-num22.1

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

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

    if 1.923554289447892e+55 < re

    1. Initial program 43.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. Simplified43.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -16436.105427898932:\\ \;\;\;\;\frac{\log \left(-re\right)}{\log base}\\ \mathbf{elif}\;re \le -2.289233214842376 \cdot 10^{-234}:\\ \;\;\;\;\frac{\log \left(\sqrt{im \cdot im + re \cdot re}\right) \cdot \log base + 0 \cdot \tan^{-1}_* \frac{im}{re}}{\log base \cdot \log base}\\ \mathbf{elif}\;re \le -1.7888060498818623 \cdot 10^{-307}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log base} \cdot \frac{\log base}{\log im}}\\ \mathbf{elif}\;re \le 1.923554289447892 \cdot 10^{+55}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log base} \cdot \frac{\log base}{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log re}{\log base}\\ \end{array}\]

Reproduce

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