Average Error: 32.5 → 0
Time: 6.6s
Precision: 64
\[\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}\]
\[\mathsf{fma}\left(1, -\frac{\left|x\right|}{x}, 1\right)\]
\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}
\mathsf{fma}\left(1, -\frac{\left|x\right|}{x}, 1\right)
double f(double x) {
        double r78701 = x;
        double r78702 = r78701 / r78701;
        double r78703 = 1.0;
        double r78704 = r78703 / r78701;
        double r78705 = r78701 * r78701;
        double r78706 = sqrt(r78705);
        double r78707 = r78704 * r78706;
        double r78708 = r78702 - r78707;
        return r78708;
}

double f(double x) {
        double r78709 = 1.0;
        double r78710 = x;
        double r78711 = fabs(r78710);
        double r78712 = r78711 / r78710;
        double r78713 = -r78712;
        double r78714 = 1.0;
        double r78715 = fma(r78709, r78713, r78714);
        return r78715;
}

Error

Bits error versus x

Target

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

Derivation

  1. Initial program 32.5

    \[\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}\]
  2. Simplified4.8

    \[\leadsto \color{blue}{1 - \frac{1}{x} \cdot \left|x\right|}\]
  3. Taylor expanded around 0 0

    \[\leadsto \color{blue}{1 - 1 \cdot \frac{\left|x\right|}{x}}\]
  4. Simplified0

    \[\leadsto \color{blue}{\mathsf{fma}\left(1, -\frac{\left|x\right|}{x}, 1\right)}\]
  5. Final simplification0

    \[\leadsto \mathsf{fma}\left(1, -\frac{\left|x\right|}{x}, 1\right)\]

Reproduce

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