Average Error: 31.9 → 18.0
Time: 28.4s
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 -5.376053604410897067220854648545447952557 \cdot 10^{96}:\\ \;\;\;\;\frac{-\log \left(\frac{-1}{re}\right)}{\log base}\\ \mathbf{elif}\;re \le -1.03440523195821972327383930959574559256 \cdot 10^{-234}:\\ \;\;\;\;\frac{1}{\frac{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}\\ \mathbf{elif}\;re \le 4.104056990699004851788340312269317657369 \cdot 10^{-290}:\\ \;\;\;\;\frac{\log im}{\log base}\\ \mathbf{elif}\;re \le 2.796818833373207130964587750200495922462 \cdot 10^{113}:\\ \;\;\;\;\frac{1}{\frac{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \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 -5.376053604410897067220854648545447952557 \cdot 10^{96}:\\
\;\;\;\;\frac{-\log \left(\frac{-1}{re}\right)}{\log base}\\

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

\mathbf{elif}\;re \le 4.104056990699004851788340312269317657369 \cdot 10^{-290}:\\
\;\;\;\;\frac{\log im}{\log base}\\

\mathbf{elif}\;re \le 2.796818833373207130964587750200495922462 \cdot 10^{113}:\\
\;\;\;\;\frac{1}{\frac{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}\\

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

\end{array}
double f(double re, double im, double base) {
        double r39380 = re;
        double r39381 = r39380 * r39380;
        double r39382 = im;
        double r39383 = r39382 * r39382;
        double r39384 = r39381 + r39383;
        double r39385 = sqrt(r39384);
        double r39386 = log(r39385);
        double r39387 = base;
        double r39388 = log(r39387);
        double r39389 = r39386 * r39388;
        double r39390 = atan2(r39382, r39380);
        double r39391 = 0.0;
        double r39392 = r39390 * r39391;
        double r39393 = r39389 + r39392;
        double r39394 = r39388 * r39388;
        double r39395 = r39391 * r39391;
        double r39396 = r39394 + r39395;
        double r39397 = r39393 / r39396;
        return r39397;
}

double f(double re, double im, double base) {
        double r39398 = re;
        double r39399 = -5.376053604410897e+96;
        bool r39400 = r39398 <= r39399;
        double r39401 = -1.0;
        double r39402 = r39401 / r39398;
        double r39403 = log(r39402);
        double r39404 = -r39403;
        double r39405 = base;
        double r39406 = log(r39405);
        double r39407 = r39404 / r39406;
        double r39408 = -1.0344052319582197e-234;
        bool r39409 = r39398 <= r39408;
        double r39410 = 1.0;
        double r39411 = 2.0;
        double r39412 = pow(r39406, r39411);
        double r39413 = 0.0;
        double r39414 = r39413 * r39413;
        double r39415 = r39412 + r39414;
        double r39416 = r39398 * r39398;
        double r39417 = im;
        double r39418 = r39417 * r39417;
        double r39419 = r39416 + r39418;
        double r39420 = sqrt(r39419);
        double r39421 = log(r39420);
        double r39422 = r39421 * r39406;
        double r39423 = atan2(r39417, r39398);
        double r39424 = r39423 * r39413;
        double r39425 = r39422 + r39424;
        double r39426 = r39415 / r39425;
        double r39427 = r39410 / r39426;
        double r39428 = 4.104056990699005e-290;
        bool r39429 = r39398 <= r39428;
        double r39430 = log(r39417);
        double r39431 = r39430 / r39406;
        double r39432 = 2.796818833373207e+113;
        bool r39433 = r39398 <= r39432;
        double r39434 = log(r39398);
        double r39435 = -r39434;
        double r39436 = -r39406;
        double r39437 = r39435 / r39436;
        double r39438 = r39433 ? r39427 : r39437;
        double r39439 = r39429 ? r39431 : r39438;
        double r39440 = r39409 ? r39427 : r39439;
        double r39441 = r39400 ? r39407 : r39440;
        return r39441;
}

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 < -5.376053604410897e+96

    1. Initial program 51.3

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

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

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

    if -5.376053604410897e+96 < re < -1.0344052319582197e-234 or 4.104056990699005e-290 < re < 2.796818833373207e+113

    1. Initial program 21.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. Using strategy rm
    3. Applied clear-num21.2

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

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

    if -1.0344052319582197e-234 < re < 4.104056990699005e-290

    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.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
    2. Taylor expanded around 0 34.7

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

    if 2.796818833373207e+113 < re

    1. Initial program 53.0

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -5.376053604410897067220854648545447952557 \cdot 10^{96}:\\ \;\;\;\;\frac{-\log \left(\frac{-1}{re}\right)}{\log base}\\ \mathbf{elif}\;re \le -1.03440523195821972327383930959574559256 \cdot 10^{-234}:\\ \;\;\;\;\frac{1}{\frac{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}\\ \mathbf{elif}\;re \le 4.104056990699004851788340312269317657369 \cdot 10^{-290}:\\ \;\;\;\;\frac{\log im}{\log base}\\ \mathbf{elif}\;re \le 2.796818833373207130964587750200495922462 \cdot 10^{113}:\\ \;\;\;\;\frac{1}{\frac{{\left(\log base\right)}^{2} + 0.0 \cdot 0.0}{\log \left(\sqrt{re \cdot re + im \cdot im}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-\log re}{-\log base}\\ \end{array}\]

Reproduce

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