Average Error: 32.3 → 0.4
Time: 8.0s
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{\frac{1}{\frac{1}{\frac{\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(re, im\right)\right), \log base, \tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}{\mathsf{hypot}\left(\log base, 0.0\right)}}}}{\sqrt{\log base \cdot \log base + 0.0 \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{\frac{1}{\frac{1}{\frac{\mathsf{fma}\left(\log \left(\mathsf{hypot}\left(re, im\right)\right), \log base, \tan^{-1}_* \frac{im}{re} \cdot 0.0\right)}{\mathsf{hypot}\left(\log base, 0.0\right)}}}}{\sqrt{\log base \cdot \log base + 0.0 \cdot 0.0}}
double f(double re, double im, double base) {
        double r46248 = re;
        double r46249 = r46248 * r46248;
        double r46250 = im;
        double r46251 = r46250 * r46250;
        double r46252 = r46249 + r46251;
        double r46253 = sqrt(r46252);
        double r46254 = log(r46253);
        double r46255 = base;
        double r46256 = log(r46255);
        double r46257 = r46254 * r46256;
        double r46258 = atan2(r46250, r46248);
        double r46259 = 0.0;
        double r46260 = r46258 * r46259;
        double r46261 = r46257 + r46260;
        double r46262 = r46256 * r46256;
        double r46263 = r46259 * r46259;
        double r46264 = r46262 + r46263;
        double r46265 = r46261 / r46264;
        return r46265;
}

double f(double re, double im, double base) {
        double r46266 = 1.0;
        double r46267 = re;
        double r46268 = im;
        double r46269 = hypot(r46267, r46268);
        double r46270 = log(r46269);
        double r46271 = base;
        double r46272 = log(r46271);
        double r46273 = atan2(r46268, r46267);
        double r46274 = 0.0;
        double r46275 = r46273 * r46274;
        double r46276 = fma(r46270, r46272, r46275);
        double r46277 = hypot(r46272, r46274);
        double r46278 = r46276 / r46277;
        double r46279 = r46266 / r46278;
        double r46280 = r46266 / r46279;
        double r46281 = r46272 * r46272;
        double r46282 = r46274 * r46274;
        double r46283 = r46281 + r46282;
        double r46284 = sqrt(r46283);
        double r46285 = r46280 / r46284;
        return r46285;
}

Error

Bits error versus re

Bits error versus im

Bits error versus base

Derivation

  1. Initial program 32.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 hypot-def0.5

    \[\leadsto \frac{\log \color{blue}{\left(\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}\]
  4. Using strategy rm
  5. Applied add-sqr-sqrt0.5

    \[\leadsto \frac{\log \left(\mathsf{hypot}\left(re, im\right)\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}}}\]
  6. Applied associate-/r*0.4

    \[\leadsto \color{blue}{\frac{\frac{\log \left(\mathsf{hypot}\left(re, im\right)\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}}}\]
  7. Simplified0.4

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

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

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

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

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

Reproduce

herbie shell --seed 2020057 +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))))