Average Error: 32.1 → 0.2
Time: 10.6s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x - 1}\right)\]
\[\log \left(\mathsf{fma}\left(x, 2, -\frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)\]
\log \left(x + \sqrt{x \cdot x - 1}\right)
\log \left(\mathsf{fma}\left(x, 2, -\frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)
double f(double x) {
        double r26288 = x;
        double r26289 = r26288 * r26288;
        double r26290 = 1.0;
        double r26291 = r26289 - r26290;
        double r26292 = sqrt(r26291);
        double r26293 = r26288 + r26292;
        double r26294 = log(r26293);
        return r26294;
}

double f(double x) {
        double r26295 = x;
        double r26296 = 2.0;
        double r26297 = 0.5;
        double r26298 = r26297 / r26295;
        double r26299 = -r26298;
        double r26300 = fma(r26295, r26296, r26299);
        double r26301 = 0.125;
        double r26302 = 3.0;
        double r26303 = pow(r26295, r26302);
        double r26304 = r26301 / r26303;
        double r26305 = r26300 - r26304;
        double r26306 = log(r26305);
        return r26306;
}

Error

Bits error versus x

Derivation

  1. Initial program 32.1

    \[\log \left(x + \sqrt{x \cdot x - 1}\right)\]
  2. Taylor expanded around inf 0.2

    \[\leadsto \log \color{blue}{\left(2 \cdot x - \left(0.5 \cdot \frac{1}{x} + 0.125 \cdot \frac{1}{{x}^{3}}\right)\right)}\]
  3. Simplified0.2

    \[\leadsto \log \color{blue}{\left(\mathsf{fma}\left(x, 2, -\frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)}\]
  4. Final simplification0.2

    \[\leadsto \log \left(\mathsf{fma}\left(x, 2, -\frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)\]

Reproduce

herbie shell --seed 2019323 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic arc-cosine"
  :precision binary64
  (log (+ x (sqrt (- (* x x) 1)))))