Average Error: 31.9 → 0.0
Time: 1.9s
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 r158038 = x;
        double r158039 = r158038 / r158038;
        double r158040 = 1.0;
        double r158041 = r158040 / r158038;
        double r158042 = r158038 * r158038;
        double r158043 = sqrt(r158042);
        double r158044 = r158041 * r158043;
        double r158045 = r158039 - r158044;
        return r158045;
}

double f(double x) {
        double r158046 = 1.0;
        double r158047 = x;
        double r158048 = r158046 / r158047;
        double r158049 = -r158048;
        double r158050 = fabs(r158047);
        double r158051 = r158049 * r158050;
        double r158052 = expm1(r158051);
        double r158053 = log1p(r158052);
        double r158054 = 1.0;
        double r158055 = r158053 + r158054;
        return r158055;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

Derivation

  1. Initial program 31.9

    \[\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}\]
  2. Simplified30.6

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

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

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

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

Reproduce

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