Average Error: 30.9 → 17.3
Time: 14.5s
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.266036080509631 \cdot 10^{+125}:\\ \;\;\;\;\frac{\log \left(-re\right)}{\log base}\\ \mathbf{elif}\;re \le 4.571038187985704 \cdot 10^{+56}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right) \cdot \frac{1}{\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.266036080509631 \cdot 10^{+125}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log base}\\

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

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

\end{array}
double f(double re, double im, double base) {
        double r955562 = re;
        double r955563 = r955562 * r955562;
        double r955564 = im;
        double r955565 = r955564 * r955564;
        double r955566 = r955563 + r955565;
        double r955567 = sqrt(r955566);
        double r955568 = log(r955567);
        double r955569 = base;
        double r955570 = log(r955569);
        double r955571 = r955568 * r955570;
        double r955572 = atan2(r955564, r955562);
        double r955573 = 0.0;
        double r955574 = r955572 * r955573;
        double r955575 = r955571 + r955574;
        double r955576 = r955570 * r955570;
        double r955577 = r955573 * r955573;
        double r955578 = r955576 + r955577;
        double r955579 = r955575 / r955578;
        return r955579;
}

double f(double re, double im, double base) {
        double r955580 = re;
        double r955581 = -2.266036080509631e+125;
        bool r955582 = r955580 <= r955581;
        double r955583 = -r955580;
        double r955584 = log(r955583);
        double r955585 = base;
        double r955586 = log(r955585);
        double r955587 = r955584 / r955586;
        double r955588 = 4.571038187985704e+56;
        bool r955589 = r955580 <= r955588;
        double r955590 = im;
        double r955591 = r955590 * r955590;
        double r955592 = r955580 * r955580;
        double r955593 = r955591 + r955592;
        double r955594 = sqrt(r955593);
        double r955595 = log(r955594);
        double r955596 = 1.0;
        double r955597 = r955596 / r955586;
        double r955598 = r955595 * r955597;
        double r955599 = log(r955580);
        double r955600 = r955599 / r955586;
        double r955601 = r955589 ? r955598 : r955600;
        double r955602 = r955582 ? r955587 : r955601;
        return r955602;
}

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.266036080509631e+125

    1. Initial program 54.3

      \[\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. Simplified54.3

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

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

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

    if -2.266036080509631e+125 < re < 4.571038187985704e+56

    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}{\log base \cdot \log base + 0 \cdot 0}\]
    2. Simplified21.4

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

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

    if 4.571038187985704e+56 < re

    1. Initial program 43.9

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.266036080509631 \cdot 10^{+125}:\\ \;\;\;\;\frac{\log \left(-re\right)}{\log base}\\ \mathbf{elif}\;re \le 4.571038187985704 \cdot 10^{+56}:\\ \;\;\;\;\log \left(\sqrt{im \cdot im + re \cdot re}\right) \cdot \frac{1}{\log base}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log re}{\log base}\\ \end{array}\]

Reproduce

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