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

\mathbf{else}:\\
\;\;\;\;x - \mathsf{fma}\left(0.125, \frac{1}{x}, 0.5\right)\\

\end{array}
double f(double x) {
        double r2546 = x;
        double r2547 = 1.0;
        double r2548 = r2546 - r2547;
        double r2549 = sqrt(r2548);
        double r2550 = sqrt(r2546);
        double r2551 = r2549 * r2550;
        return r2551;
}

double f(double x) {
        double r2552 = x;
        double r2553 = 83535.1482247475;
        bool r2554 = r2552 <= r2553;
        double r2555 = 1.0;
        double r2556 = r2552 - r2555;
        double r2557 = r2556 * r2552;
        double r2558 = sqrt(r2557);
        double r2559 = 0.125;
        double r2560 = 1.0;
        double r2561 = r2560 / r2552;
        double r2562 = 0.5;
        double r2563 = fma(r2559, r2561, r2562);
        double r2564 = r2552 - r2563;
        double r2565 = r2554 ? r2558 : r2564;
        return r2565;
}

Error

Bits error versus x

Derivation

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

    1. Initial program 0.3

      \[\sqrt{x - 1} \cdot \sqrt{x}\]
    2. Using strategy rm
    3. Applied sqrt-unprod0.1

      \[\leadsto \color{blue}{\sqrt{\left(x - 1\right) \cdot x}}\]

    if 83535.1482247475 < x

    1. Initial program 0.5

      \[\sqrt{x - 1} \cdot \sqrt{x}\]
    2. Taylor expanded around inf 0.0

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

      \[\leadsto \color{blue}{x - \mathsf{fma}\left(0.125, \frac{1}{x}, 0.5\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.0

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

Reproduce

herbie shell --seed 2019362 +o rules:numerics
(FPCore (x)
  :name "sqrt times"
  :precision binary64
  (* (sqrt (- x 1)) (sqrt x)))