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

\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 r41631 = re;
        double r41632 = r41631 * r41631;
        double r41633 = im;
        double r41634 = r41633 * r41633;
        double r41635 = r41632 + r41634;
        double r41636 = sqrt(r41635);
        double r41637 = log(r41636);
        double r41638 = base;
        double r41639 = log(r41638);
        double r41640 = r41637 * r41639;
        double r41641 = atan2(r41633, r41631);
        double r41642 = 0.0;
        double r41643 = r41641 * r41642;
        double r41644 = r41640 + r41643;
        double r41645 = r41639 * r41639;
        double r41646 = r41642 * r41642;
        double r41647 = r41645 + r41646;
        double r41648 = r41644 / r41647;
        return r41648;
}

double f(double re, double im, double base) {
        double r41649 = re;
        double r41650 = -6.531289779340832e+88;
        bool r41651 = r41649 <= r41650;
        double r41652 = -1.0;
        double r41653 = r41652 * r41649;
        double r41654 = log(r41653);
        double r41655 = base;
        double r41656 = log(r41655);
        double r41657 = r41654 * r41656;
        double r41658 = im;
        double r41659 = atan2(r41658, r41649);
        double r41660 = 0.0;
        double r41661 = r41659 * r41660;
        double r41662 = r41657 + r41661;
        double r41663 = r41656 * r41656;
        double r41664 = r41660 * r41660;
        double r41665 = r41663 + r41664;
        double r41666 = r41662 / r41665;
        double r41667 = 2.029807406530831e+115;
        bool r41668 = r41649 <= r41667;
        double r41669 = r41649 * r41649;
        double r41670 = r41658 * r41658;
        double r41671 = r41669 + r41670;
        double r41672 = sqrt(r41671);
        double r41673 = log(r41672);
        double r41674 = r41673 * r41656;
        double r41675 = r41674 * r41674;
        double r41676 = r41661 * r41661;
        double r41677 = r41675 - r41676;
        double r41678 = r41674 - r41661;
        double r41679 = 2.0;
        double r41680 = pow(r41656, r41679);
        double r41681 = r41664 + r41680;
        double r41682 = r41678 * r41681;
        double r41683 = r41677 / r41682;
        double r41684 = 1.0;
        double r41685 = r41684 / r41649;
        double r41686 = log(r41685);
        double r41687 = r41684 / r41655;
        double r41688 = log(r41687);
        double r41689 = r41686 / r41688;
        double r41690 = r41668 ? r41683 : r41689;
        double r41691 = r41651 ? r41666 : r41690;
        return r41691;
}

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

    1. Initial program 49.6

      \[\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 9.4

      \[\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 -6.531289779340832e+88 < re < 2.029807406530831e+115

    1. Initial program 21.7

      \[\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 flip-+21.7

      \[\leadsto \frac{\color{blue}{\frac{\left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base\right) \cdot \left(\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base\right) - \left(\tan^{-1}_* \frac{im}{re} \cdot 0.0\right) \cdot \left(\tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}{\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}\]
    4. Applied associate-/l/21.7

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

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

    if 2.029807406530831e+115 < re

    1. Initial program 55.7

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

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

Reproduce

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