Average Error: 0.2 → 0.0
Time: 16.1s
Precision: 64
\[\frac{x}{1 + \sqrt{x + 1}}\]
\[\begin{array}{l} \mathbf{if}\;x \le 3410021961549198:\\ \;\;\;\;\frac{x}{1 + \frac{\sqrt{\mathsf{fma}\left(1 \cdot 1, 1, x \cdot \left(x \cdot x\right)\right)}}{\sqrt{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{x} \cdot \frac{\sqrt{x}}{1 + \sqrt{x + 1}}\\ \end{array}\]
\frac{x}{1 + \sqrt{x + 1}}
\begin{array}{l}
\mathbf{if}\;x \le 3410021961549198:\\
\;\;\;\;\frac{x}{1 + \frac{\sqrt{\mathsf{fma}\left(1 \cdot 1, 1, x \cdot \left(x \cdot x\right)\right)}}{\sqrt{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{x} \cdot \frac{\sqrt{x}}{1 + \sqrt{x + 1}}\\

\end{array}
double f(double x) {
        double r12017432 = x;
        double r12017433 = 1.0;
        double r12017434 = r12017432 + r12017433;
        double r12017435 = sqrt(r12017434);
        double r12017436 = r12017433 + r12017435;
        double r12017437 = r12017432 / r12017436;
        return r12017437;
}

double f(double x) {
        double r12017438 = x;
        double r12017439 = 3410021961549198.0;
        bool r12017440 = r12017438 <= r12017439;
        double r12017441 = 1.0;
        double r12017442 = r12017441 * r12017441;
        double r12017443 = r12017438 * r12017438;
        double r12017444 = r12017438 * r12017443;
        double r12017445 = fma(r12017442, r12017441, r12017444);
        double r12017446 = sqrt(r12017445);
        double r12017447 = r12017438 * r12017441;
        double r12017448 = r12017442 - r12017447;
        double r12017449 = r12017443 + r12017448;
        double r12017450 = sqrt(r12017449);
        double r12017451 = r12017446 / r12017450;
        double r12017452 = r12017441 + r12017451;
        double r12017453 = r12017438 / r12017452;
        double r12017454 = sqrt(r12017438);
        double r12017455 = r12017438 + r12017441;
        double r12017456 = sqrt(r12017455);
        double r12017457 = r12017441 + r12017456;
        double r12017458 = r12017454 / r12017457;
        double r12017459 = r12017454 * r12017458;
        double r12017460 = r12017440 ? r12017453 : r12017459;
        return r12017460;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < 3410021961549198.0

    1. Initial program 0.0

      \[\frac{x}{1 + \sqrt{x + 1}}\]
    2. Using strategy rm
    3. Applied flip3-+0.0

      \[\leadsto \frac{x}{1 + \sqrt{\color{blue}{\frac{{x}^{3} + {1}^{3}}{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}}}\]
    4. Applied sqrt-div0.0

      \[\leadsto \frac{x}{1 + \color{blue}{\frac{\sqrt{{x}^{3} + {1}^{3}}}{\sqrt{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}}}\]
    5. Simplified0.0

      \[\leadsto \frac{x}{1 + \frac{\color{blue}{\sqrt{\mathsf{fma}\left(1 \cdot 1, 1, x \cdot \left(x \cdot x\right)\right)}}}{\sqrt{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}}\]

    if 3410021961549198.0 < x

    1. Initial program 0.5

      \[\frac{x}{1 + \sqrt{x + 1}}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity0.5

      \[\leadsto \frac{x}{\color{blue}{1 \cdot \left(1 + \sqrt{x + 1}\right)}}\]
    4. Applied add-sqr-sqrt0.1

      \[\leadsto \frac{\color{blue}{\sqrt{x} \cdot \sqrt{x}}}{1 \cdot \left(1 + \sqrt{x + 1}\right)}\]
    5. Applied times-frac0.0

      \[\leadsto \color{blue}{\frac{\sqrt{x}}{1} \cdot \frac{\sqrt{x}}{1 + \sqrt{x + 1}}}\]
    6. Simplified0.0

      \[\leadsto \color{blue}{\sqrt{x}} \cdot \frac{\sqrt{x}}{1 + \sqrt{x + 1}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 3410021961549198:\\ \;\;\;\;\frac{x}{1 + \frac{\sqrt{\mathsf{fma}\left(1 \cdot 1, 1, x \cdot \left(x \cdot x\right)\right)}}{\sqrt{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{x} \cdot \frac{\sqrt{x}}{1 + \sqrt{x + 1}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019173 +o rules:numerics
(FPCore (x)
  :name "Numeric.Log:$clog1p from log-domain-0.10.2.1, B"
  (/ x (+ 1.0 (sqrt (+ x 1.0)))))