Average Error: 31.9 → 0.5
Time: 7.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}\]
\[\frac{1}{\frac{\log base \cdot \log base + 0.0 \cdot 0.0}{\log \left(1 \cdot \mathsf{hypot}\left(re, im\right)\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.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}
\frac{1}{\frac{\log base \cdot \log base + 0.0 \cdot 0.0}{\log \left(1 \cdot \mathsf{hypot}\left(re, im\right)\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}
double f(double re, double im, double base) {
        double r45572 = re;
        double r45573 = r45572 * r45572;
        double r45574 = im;
        double r45575 = r45574 * r45574;
        double r45576 = r45573 + r45575;
        double r45577 = sqrt(r45576);
        double r45578 = log(r45577);
        double r45579 = base;
        double r45580 = log(r45579);
        double r45581 = r45578 * r45580;
        double r45582 = atan2(r45574, r45572);
        double r45583 = 0.0;
        double r45584 = r45582 * r45583;
        double r45585 = r45581 + r45584;
        double r45586 = r45580 * r45580;
        double r45587 = r45583 * r45583;
        double r45588 = r45586 + r45587;
        double r45589 = r45585 / r45588;
        return r45589;
}

double f(double re, double im, double base) {
        double r45590 = 1.0;
        double r45591 = base;
        double r45592 = log(r45591);
        double r45593 = r45592 * r45592;
        double r45594 = 0.0;
        double r45595 = r45594 * r45594;
        double r45596 = r45593 + r45595;
        double r45597 = re;
        double r45598 = im;
        double r45599 = hypot(r45597, r45598);
        double r45600 = r45590 * r45599;
        double r45601 = log(r45600);
        double r45602 = r45601 * r45592;
        double r45603 = atan2(r45598, r45597);
        double r45604 = r45603 * r45594;
        double r45605 = r45602 + r45604;
        double r45606 = r45596 / r45605;
        double r45607 = r45590 / r45606;
        return r45607;
}

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. Initial program 31.9

    \[\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 *-un-lft-identity31.9

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

    \[\leadsto \frac{\log \color{blue}{\left(\sqrt{1} \cdot \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}\]
  5. Simplified31.9

    \[\leadsto \frac{\log \left(\color{blue}{1} \cdot \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}\]
  6. Simplified0.5

    \[\leadsto \frac{\log \left(1 \cdot \color{blue}{\mathsf{hypot}\left(re, im\right)}\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}{\log base \cdot \log base + 0.0 \cdot 0.0}\]
  7. Using strategy rm
  8. Applied clear-num0.5

    \[\leadsto \color{blue}{\frac{1}{\frac{\log base \cdot \log base + 0.0 \cdot 0.0}{\log \left(1 \cdot \mathsf{hypot}\left(re, im\right)\right) \cdot \log base + \tan^{-1}_* \frac{im}{re} \cdot 0.0}}}\]
  9. Final simplification0.5

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

Reproduce

herbie shell --seed 2019346 +o rules:numerics
(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))))