Average Error: 32.0 → 17.5
Time: 54.6s
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 -2.178124817795752902398331940971666652664 \cdot 10^{114}:\\ \;\;\;\;\frac{\log \left(-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 9.38505452091062154296414227123138742096 \cdot 10^{137}:\\ \;\;\;\;\frac{1}{\sqrt{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}} \cdot \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{{\left(\log base\right)}^{2} + 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 -2.178124817795752902398331940971666652664 \cdot 10^{114}:\\
\;\;\;\;\frac{\log \left(-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 9.38505452091062154296414227123138742096 \cdot 10^{137}:\\
\;\;\;\;\frac{1}{\sqrt{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}} \cdot \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}}\\

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

\end{array}
double f(double re, double im, double base) {
        double r98139 = re;
        double r98140 = r98139 * r98139;
        double r98141 = im;
        double r98142 = r98141 * r98141;
        double r98143 = r98140 + r98142;
        double r98144 = sqrt(r98143);
        double r98145 = log(r98144);
        double r98146 = base;
        double r98147 = log(r98146);
        double r98148 = r98145 * r98147;
        double r98149 = atan2(r98141, r98139);
        double r98150 = 0.0;
        double r98151 = r98149 * r98150;
        double r98152 = r98148 + r98151;
        double r98153 = r98147 * r98147;
        double r98154 = r98150 * r98150;
        double r98155 = r98153 + r98154;
        double r98156 = r98152 / r98155;
        return r98156;
}

double f(double re, double im, double base) {
        double r98157 = re;
        double r98158 = -2.178124817795753e+114;
        bool r98159 = r98157 <= r98158;
        double r98160 = -r98157;
        double r98161 = log(r98160);
        double r98162 = base;
        double r98163 = log(r98162);
        double r98164 = r98161 * r98163;
        double r98165 = im;
        double r98166 = atan2(r98165, r98157);
        double r98167 = 0.0;
        double r98168 = r98166 * r98167;
        double r98169 = r98164 + r98168;
        double r98170 = r98163 * r98163;
        double r98171 = r98167 * r98167;
        double r98172 = r98170 + r98171;
        double r98173 = r98169 / r98172;
        double r98174 = 9.385054520910622e+137;
        bool r98175 = r98157 <= r98174;
        double r98176 = 1.0;
        double r98177 = 2.0;
        double r98178 = pow(r98163, r98177);
        double r98179 = r98178 + r98171;
        double r98180 = sqrt(r98179);
        double r98181 = r98176 / r98180;
        double r98182 = r98157 * r98157;
        double r98183 = r98165 * r98165;
        double r98184 = r98182 + r98183;
        double r98185 = sqrt(r98184);
        double r98186 = log(r98185);
        double r98187 = r98186 * r98163;
        double r98188 = r98187 + r98168;
        double r98189 = r98188 / r98180;
        double r98190 = r98181 * r98189;
        double r98191 = log(r98157);
        double r98192 = -r98191;
        double r98193 = -r98163;
        double r98194 = r98192 / r98193;
        double r98195 = r98175 ? r98190 : r98194;
        double r98196 = r98159 ? r98173 : r98195;
        return r98196;
}

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.178124817795753e+114

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

      \[\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}\]
    3. Simplified8.6

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

    if -2.178124817795753e+114 < re < 9.385054520910622e+137

    1. Initial program 21.5

      \[\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-sqrt21.5

      \[\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 *-un-lft-identity21.5

      \[\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.0\right)}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0} \cdot \sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\]
    5. Applied times-frac21.4

      \[\leadsto \color{blue}{\frac{1}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}} \cdot \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}}}\]
    6. Simplified21.4

      \[\leadsto \color{blue}{\frac{1}{\sqrt{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}}} \cdot \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}}\]
    7. Simplified21.4

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

    if 9.385054520910622e+137 < re

    1. Initial program 60.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.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.178124817795752902398331940971666652664 \cdot 10^{114}:\\ \;\;\;\;\frac{\log \left(-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 9.38505452091062154296414227123138742096 \cdot 10^{137}:\\ \;\;\;\;\frac{1}{\sqrt{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}} \cdot \frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\sqrt{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-\log re}{-\log base}\\ \end{array}\]

Reproduce

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