Average Error: 32.4 → 0
Time: 2.0s
Precision: 64
\[\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}\]
\[\mathsf{log1p}\left(\mathsf{expm1}\left(\left(-\frac{1}{x}\right) \cdot \left|x\right|\right)\right) + 1\]
\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}
\mathsf{log1p}\left(\mathsf{expm1}\left(\left(-\frac{1}{x}\right) \cdot \left|x\right|\right)\right) + 1
double f(double x) {
        double r196678 = x;
        double r196679 = r196678 / r196678;
        double r196680 = 1.0;
        double r196681 = r196680 / r196678;
        double r196682 = r196678 * r196678;
        double r196683 = sqrt(r196682);
        double r196684 = r196681 * r196683;
        double r196685 = r196679 - r196684;
        return r196685;
}

double f(double x) {
        double r196686 = 1.0;
        double r196687 = x;
        double r196688 = r196686 / r196687;
        double r196689 = -r196688;
        double r196690 = fabs(r196687);
        double r196691 = r196689 * r196690;
        double r196692 = expm1(r196691);
        double r196693 = log1p(r196692);
        double r196694 = 1.0;
        double r196695 = r196693 + r196694;
        return r196695;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original32.4
Target0
Herbie0
\[\begin{array}{l} \mathbf{if}\;x \lt 0.0:\\ \;\;\;\;2\\ \mathbf{else}:\\ \;\;\;\;0.0\\ \end{array}\]

Derivation

  1. Initial program 32.4

    \[\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}\]
  2. Simplified31.3

    \[\leadsto \color{blue}{\mathsf{fma}\left(-\frac{1}{x}, \left|x\right|, 1\right)}\]
  3. Using strategy rm
  4. Applied fma-udef4.8

    \[\leadsto \color{blue}{\left(-\frac{1}{x}\right) \cdot \left|x\right| + 1}\]
  5. Using strategy rm
  6. Applied log1p-expm1-u0

    \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\left(-\frac{1}{x}\right) \cdot \left|x\right|\right)\right)} + 1\]
  7. Final simplification0

    \[\leadsto \mathsf{log1p}\left(\mathsf{expm1}\left(\left(-\frac{1}{x}\right) \cdot \left|x\right|\right)\right) + 1\]

Reproduce

herbie shell --seed 2019353 +o rules:numerics
(FPCore (x)
  :name "sqrt sqr"
  :precision binary64

  :herbie-target
  (if (< x 0.0) 2 0.0)

  (- (/ x x) (* (/ 1 x) (sqrt (* x x)))))