Average Error: 32.6 → 4.7
Time: 2.2s
Precision: 64
\[\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}\]
\[\begin{array}{l} \mathbf{if}\;x \le 13541947.820076145 \lor \neg \left(x \le 2.3225985825775652 \cdot 10^{236}\right):\\ \;\;\;\;\log \left(e^{\mathsf{fma}\left(-\frac{1}{x}, \left|x\right|, 1\right)}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(-\frac{1}{x}\right) \cdot \left|x\right| + 1\\ \end{array}\]
\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}
\begin{array}{l}
\mathbf{if}\;x \le 13541947.820076145 \lor \neg \left(x \le 2.3225985825775652 \cdot 10^{236}\right):\\
\;\;\;\;\log \left(e^{\mathsf{fma}\left(-\frac{1}{x}, \left|x\right|, 1\right)}\right)\\

\mathbf{else}:\\
\;\;\;\;\left(-\frac{1}{x}\right) \cdot \left|x\right| + 1\\

\end{array}
double code(double x) {
	return ((double) (((double) (x / x)) - ((double) (((double) (1.0 / x)) * ((double) sqrt(((double) (x * x))))))));
}
double code(double x) {
	double VAR;
	if (((x <= 13541947.820076145) || !(x <= 2.3225985825775652e+236))) {
		VAR = ((double) log(((double) exp(((double) fma(((double) -(((double) (1.0 / x)))), ((double) fabs(x)), 1.0))))));
	} else {
		VAR = ((double) (((double) (((double) -(((double) (1.0 / x)))) * ((double) fabs(x)))) + 1.0));
	}
	return VAR;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

Derivation

  1. Split input into 2 regimes
  2. if x < 13541947.820076145 or 2.3225985825775652e+236 < x

    1. Initial program 33.2

      \[\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}\]
    2. Simplified23.4

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

      \[\leadsto \color{blue}{\log \left(e^{\mathsf{fma}\left(-\frac{1}{x}, \left|x\right|, 1\right)}\right)}\]

    if 13541947.820076145 < x < 2.3225985825775652e+236

    1. Initial program 29.6

      \[\frac{x}{x} - \frac{1}{x} \cdot \sqrt{x \cdot x}\]
    2. Simplified61.9

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

      \[\leadsto \color{blue}{\left(-\frac{1}{x}\right) \cdot \left|x\right| + 1}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 13541947.820076145 \lor \neg \left(x \le 2.3225985825775652 \cdot 10^{236}\right):\\ \;\;\;\;\log \left(e^{\mathsf{fma}\left(-\frac{1}{x}, \left|x\right|, 1\right)}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(-\frac{1}{x}\right) \cdot \left|x\right| + 1\\ \end{array}\]

Reproduce

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