Average Error: 31.1 → 0.5
Time: 2.0m
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}\]
\[\frac{\frac{1}{\log base}}{\frac{1}{\log \left(\sqrt{re^2 + im^2}^*\right)}}\]
double f(double re, double im, double base) {
        double r2468820 = re;
        double r2468821 = r2468820 * r2468820;
        double r2468822 = im;
        double r2468823 = r2468822 * r2468822;
        double r2468824 = r2468821 + r2468823;
        double r2468825 = sqrt(r2468824);
        double r2468826 = log(r2468825);
        double r2468827 = base;
        double r2468828 = log(r2468827);
        double r2468829 = r2468826 * r2468828;
        double r2468830 = atan2(r2468822, r2468820);
        double r2468831 = 0.0;
        double r2468832 = r2468830 * r2468831;
        double r2468833 = r2468829 + r2468832;
        double r2468834 = r2468828 * r2468828;
        double r2468835 = r2468831 * r2468831;
        double r2468836 = r2468834 + r2468835;
        double r2468837 = r2468833 / r2468836;
        return r2468837;
}

double f(double re, double im, double base) {
        double r2468838 = 1.0;
        double r2468839 = base;
        double r2468840 = log(r2468839);
        double r2468841 = r2468838 / r2468840;
        double r2468842 = re;
        double r2468843 = im;
        double r2468844 = hypot(r2468842, r2468843);
        double r2468845 = log(r2468844);
        double r2468846 = r2468838 / r2468845;
        double r2468847 = r2468841 / r2468846;
        return r2468847;
}

\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}
\frac{\frac{1}{\log base}}{\frac{1}{\log \left(\sqrt{re^2 + im^2}^*\right)}}

Error

Bits error versus re

Bits error versus im

Bits error versus base

Derivation

  1. Initial program 31.1

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

    \[\leadsto \color{blue}{\frac{\log \left(\sqrt{re^2 + im^2}^*\right)}{\log base}}\]
  3. Using strategy rm
  4. Applied *-un-lft-identity0.3

    \[\leadsto \frac{\color{blue}{1 \cdot \log \left(\sqrt{re^2 + im^2}^*\right)}}{\log base}\]
  5. Applied associate-/l*0.4

    \[\leadsto \color{blue}{\frac{1}{\frac{\log base}{\log \left(\sqrt{re^2 + im^2}^*\right)}}}\]
  6. Using strategy rm
  7. Applied div-inv0.5

    \[\leadsto \frac{1}{\color{blue}{\log base \cdot \frac{1}{\log \left(\sqrt{re^2 + im^2}^*\right)}}}\]
  8. Applied associate-/r*0.5

    \[\leadsto \color{blue}{\frac{\frac{1}{\log base}}{\frac{1}{\log \left(\sqrt{re^2 + im^2}^*\right)}}}\]
  9. Final simplification0.5

    \[\leadsto \frac{\frac{1}{\log base}}{\frac{1}{\log \left(\sqrt{re^2 + im^2}^*\right)}}\]

Reproduce

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