Average Error: 31.2 → 0.3
Time: 16.0s
Precision: 64
\[\frac{1 - \cos x}{x \cdot x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.03339438899281232248084094749174255412072 \lor \neg \left(x \le 0.02980554453480009288734997596748144133016\right):\\ \;\;\;\;\frac{1}{x} \cdot \frac{1 - \cos x}{x}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{-1}{24}, x \cdot x, \mathsf{fma}\left(\frac{1}{720}, {x}^{4}, \frac{1}{2}\right)\right)\\ \end{array}\]
\frac{1 - \cos x}{x \cdot x}
\begin{array}{l}
\mathbf{if}\;x \le -0.03339438899281232248084094749174255412072 \lor \neg \left(x \le 0.02980554453480009288734997596748144133016\right):\\
\;\;\;\;\frac{1}{x} \cdot \frac{1 - \cos x}{x}\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{-1}{24}, x \cdot x, \mathsf{fma}\left(\frac{1}{720}, {x}^{4}, \frac{1}{2}\right)\right)\\

\end{array}
double f(double x) {
        double r19449 = 1.0;
        double r19450 = x;
        double r19451 = cos(r19450);
        double r19452 = r19449 - r19451;
        double r19453 = r19450 * r19450;
        double r19454 = r19452 / r19453;
        return r19454;
}

double f(double x) {
        double r19455 = x;
        double r19456 = -0.03339438899281232;
        bool r19457 = r19455 <= r19456;
        double r19458 = 0.029805544534800093;
        bool r19459 = r19455 <= r19458;
        double r19460 = !r19459;
        bool r19461 = r19457 || r19460;
        double r19462 = 1.0;
        double r19463 = r19462 / r19455;
        double r19464 = 1.0;
        double r19465 = cos(r19455);
        double r19466 = r19464 - r19465;
        double r19467 = r19466 / r19455;
        double r19468 = r19463 * r19467;
        double r19469 = -0.041666666666666664;
        double r19470 = r19455 * r19455;
        double r19471 = 0.001388888888888889;
        double r19472 = 4.0;
        double r19473 = pow(r19455, r19472);
        double r19474 = 0.5;
        double r19475 = fma(r19471, r19473, r19474);
        double r19476 = fma(r19469, r19470, r19475);
        double r19477 = r19461 ? r19468 : r19476;
        return r19477;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -0.03339438899281232 or 0.029805544534800093 < x

    1. Initial program 1.1

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity1.1

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

      \[\leadsto \color{blue}{\frac{1}{x} \cdot \frac{1 - \cos x}{x}}\]

    if -0.03339438899281232 < x < 0.029805544534800093

    1. Initial program 62.4

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity62.4

      \[\leadsto \frac{\color{blue}{1 \cdot \left(1 - \cos x\right)}}{x \cdot x}\]
    4. Applied times-frac61.4

      \[\leadsto \color{blue}{\frac{1}{x} \cdot \frac{1 - \cos x}{x}}\]
    5. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\left(\frac{1}{720} \cdot {x}^{4} + \frac{1}{2}\right) - \frac{1}{24} \cdot {x}^{2}}\]
    6. Simplified0.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.03339438899281232248084094749174255412072 \lor \neg \left(x \le 0.02980554453480009288734997596748144133016\right):\\ \;\;\;\;\frac{1}{x} \cdot \frac{1 - \cos x}{x}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{-1}{24}, x \cdot x, \mathsf{fma}\left(\frac{1}{720}, {x}^{4}, \frac{1}{2}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019322 +o rules:numerics
(FPCore (x)
  :name "cos2 (problem 3.4.1)"
  :precision binary64
  (/ (- 1 (cos x)) (* x x)))