Average Error: 31.7 → 17.0
Time: 7.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 -4.770818586350099100842053924431423433583 \cdot 10^{91}:\\ \;\;\;\;\frac{1}{\frac{0.0 \cdot 0.0 + {\left(\log base\right)}^{2}}{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}\\ \mathbf{elif}\;re \le 1.80475852115182665718096204373417743265 \cdot 10^{92}:\\ \;\;\;\;\frac{\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}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{\log \left(\frac{1}{base}\right)}{\log \left(\frac{1}{re}\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 -4.770818586350099100842053924431423433583 \cdot 10^{91}:\\
\;\;\;\;\frac{1}{\frac{0.0 \cdot 0.0 + {\left(\log base\right)}^{2}}{\log \left(-1 \cdot re\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}\\

\mathbf{elif}\;re \le 1.80475852115182665718096204373417743265 \cdot 10^{92}:\\
\;\;\;\;\frac{\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}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}\\

\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\log \left(\frac{1}{base}\right)}{\log \left(\frac{1}{re}\right)}}\\

\end{array}
double f(double re, double im, double base) {
        double r100248 = re;
        double r100249 = r100248 * r100248;
        double r100250 = im;
        double r100251 = r100250 * r100250;
        double r100252 = r100249 + r100251;
        double r100253 = sqrt(r100252);
        double r100254 = log(r100253);
        double r100255 = base;
        double r100256 = log(r100255);
        double r100257 = r100254 * r100256;
        double r100258 = atan2(r100250, r100248);
        double r100259 = 0.0;
        double r100260 = r100258 * r100259;
        double r100261 = r100257 + r100260;
        double r100262 = r100256 * r100256;
        double r100263 = r100259 * r100259;
        double r100264 = r100262 + r100263;
        double r100265 = r100261 / r100264;
        return r100265;
}

double f(double re, double im, double base) {
        double r100266 = re;
        double r100267 = -4.770818586350099e+91;
        bool r100268 = r100266 <= r100267;
        double r100269 = 1.0;
        double r100270 = 0.0;
        double r100271 = r100270 * r100270;
        double r100272 = base;
        double r100273 = log(r100272);
        double r100274 = 2.0;
        double r100275 = pow(r100273, r100274);
        double r100276 = r100271 + r100275;
        double r100277 = -1.0;
        double r100278 = r100277 * r100266;
        double r100279 = log(r100278);
        double r100280 = r100279 * r100273;
        double r100281 = im;
        double r100282 = atan2(r100281, r100266);
        double r100283 = r100282 * r100270;
        double r100284 = r100280 + r100283;
        double r100285 = r100276 / r100284;
        double r100286 = r100269 / r100285;
        double r100287 = 1.8047585211518267e+92;
        bool r100288 = r100266 <= r100287;
        double r100289 = r100266 * r100266;
        double r100290 = r100281 * r100281;
        double r100291 = r100289 + r100290;
        double r100292 = sqrt(r100291);
        double r100293 = log(r100292);
        double r100294 = r100293 * r100273;
        double r100295 = r100294 + r100283;
        double r100296 = r100273 * r100273;
        double r100297 = r100296 + r100271;
        double r100298 = sqrt(r100297);
        double r100299 = r100295 / r100298;
        double r100300 = r100299 / r100298;
        double r100301 = r100269 / r100272;
        double r100302 = log(r100301);
        double r100303 = r100269 / r100266;
        double r100304 = log(r100303);
        double r100305 = r100302 / r100304;
        double r100306 = r100269 / r100305;
        double r100307 = r100288 ? r100300 : r100306;
        double r100308 = r100268 ? r100286 : r100307;
        return r100308;
}

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 < -4.770818586350099e+91

    1. Initial program 49.4

      \[\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-num49.4

      \[\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. Simplified49.4

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

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

    if -4.770818586350099e+91 < re < 1.8047585211518267e+92

    1. Initial program 21.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. Using strategy rm
    3. Applied add-sqr-sqrt21.8

      \[\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 associate-/r*21.7

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

    if 1.8047585211518267e+92 < re

    1. Initial program 50.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. Using strategy rm
    3. Applied clear-num50.3

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

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

      \[\leadsto \frac{1}{\color{blue}{\frac{\log \left(\frac{1}{base}\right)}{\log \left(\frac{1}{re}\right)}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification17.0

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

Reproduce

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