Average Error: 30.7 → 17.3
Time: 1.2m
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.6939147341520852 \cdot 10^{+126}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log \left(-re\right)}}\\ \mathbf{elif}\;re \le -4.573649974847702 \cdot 10^{-157}:\\ \;\;\;\;\frac{1}{\frac{1}{\frac{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}{\log base}}}\\ \mathbf{elif}\;re \le -7.929293363153046 \cdot 10^{-228}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log im}}\\ \mathbf{elif}\;re \le 7.000536400588895 \cdot 10^{+101}:\\ \;\;\;\;\frac{1}{\frac{1}{\frac{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}{\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.6939147341520852 \cdot 10^{+126}:\\
\;\;\;\;\frac{1}{\frac{\log base}{\log \left(-re\right)}}\\

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

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

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

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

\end{array}
double f(double re, double im, double base) {
        double r1171667 = re;
        double r1171668 = r1171667 * r1171667;
        double r1171669 = im;
        double r1171670 = r1171669 * r1171669;
        double r1171671 = r1171668 + r1171670;
        double r1171672 = sqrt(r1171671);
        double r1171673 = log(r1171672);
        double r1171674 = base;
        double r1171675 = log(r1171674);
        double r1171676 = r1171673 * r1171675;
        double r1171677 = atan2(r1171669, r1171667);
        double r1171678 = 0.0;
        double r1171679 = r1171677 * r1171678;
        double r1171680 = r1171676 + r1171679;
        double r1171681 = r1171675 * r1171675;
        double r1171682 = r1171678 * r1171678;
        double r1171683 = r1171681 + r1171682;
        double r1171684 = r1171680 / r1171683;
        return r1171684;
}

double f(double re, double im, double base) {
        double r1171685 = re;
        double r1171686 = -2.6939147341520852e+126;
        bool r1171687 = r1171685 <= r1171686;
        double r1171688 = 1.0;
        double r1171689 = base;
        double r1171690 = log(r1171689);
        double r1171691 = -r1171685;
        double r1171692 = log(r1171691);
        double r1171693 = r1171690 / r1171692;
        double r1171694 = r1171688 / r1171693;
        double r1171695 = -4.573649974847702e-157;
        bool r1171696 = r1171685 <= r1171695;
        double r1171697 = im;
        double r1171698 = r1171697 * r1171697;
        double r1171699 = r1171685 * r1171685;
        double r1171700 = r1171698 + r1171699;
        double r1171701 = sqrt(r1171700);
        double r1171702 = log(r1171701);
        double r1171703 = r1171702 / r1171690;
        double r1171704 = r1171688 / r1171703;
        double r1171705 = r1171688 / r1171704;
        double r1171706 = -7.929293363153046e-228;
        bool r1171707 = r1171685 <= r1171706;
        double r1171708 = log(r1171697);
        double r1171709 = r1171690 / r1171708;
        double r1171710 = r1171688 / r1171709;
        double r1171711 = 7.000536400588895e+101;
        bool r1171712 = r1171685 <= r1171711;
        double r1171713 = log(r1171685);
        double r1171714 = -r1171690;
        double r1171715 = r1171713 / r1171714;
        double r1171716 = -r1171715;
        double r1171717 = r1171712 ? r1171705 : r1171716;
        double r1171718 = r1171707 ? r1171710 : r1171717;
        double r1171719 = r1171696 ? r1171705 : r1171718;
        double r1171720 = r1171687 ? r1171694 : r1171719;
        return r1171720;
}

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 < -2.6939147341520852e+126

    1. Initial program 55.0

      \[\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. Simplified55.0

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Using strategy rm
    4. Applied clear-num55.0

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

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

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

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

    if -2.6939147341520852e+126 < re < -4.573649974847702e-157 or -7.929293363153046e-228 < re < 7.000536400588895e+101

    1. Initial program 20.0

      \[\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. Simplified20.0

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Using strategy rm
    4. Applied clear-num20.0

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

      \[\leadsto \frac{1}{\color{blue}{\frac{\log base}{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}}\]
    6. Using strategy rm
    7. Applied clear-num19.9

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

    if -4.573649974847702e-157 < re < -7.929293363153046e-228

    1. Initial program 29.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. Simplified29.5

      \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base}{\log base \cdot \log base}}\]
    3. Using strategy rm
    4. Applied clear-num29.5

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

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

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

    if 7.000536400588895e+101 < re

    1. Initial program 49.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. Simplified49.5

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

      \[\leadsto \color{blue}{\frac{\log \left(\frac{1}{re}\right)}{\log \left(\frac{1}{base}\right)}}\]
    4. Simplified9.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.6939147341520852 \cdot 10^{+126}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log \left(-re\right)}}\\ \mathbf{elif}\;re \le -4.573649974847702 \cdot 10^{-157}:\\ \;\;\;\;\frac{1}{\frac{1}{\frac{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}{\log base}}}\\ \mathbf{elif}\;re \le -7.929293363153046 \cdot 10^{-228}:\\ \;\;\;\;\frac{1}{\frac{\log base}{\log im}}\\ \mathbf{elif}\;re \le 7.000536400588895 \cdot 10^{+101}:\\ \;\;\;\;\frac{1}{\frac{1}{\frac{\log \left(\sqrt{im \cdot im + re \cdot re}\right)}{\log base}}}\\ \mathbf{else}:\\ \;\;\;\;-\frac{\log re}{-\log base}\\ \end{array}\]

Reproduce

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