Average Error: 31.5 → 0.6
Time: 9.0s
Precision: 64
\[\frac{1 - \cos x}{x \cdot x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.03415862644372414:\\ \;\;\;\;\left(1 - \cos x\right) \cdot \frac{1}{x \cdot x}\\ \mathbf{elif}\;x \le 0.034763904894879627:\\ \;\;\;\;\mathsf{fma}\left({x}^{2}, \frac{-1}{24}, \mathsf{fma}\left(\frac{1}{720}, {x}^{4}, \frac{1}{2}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x \cdot x} - \frac{\cos x}{x \cdot x}\\ \end{array}\]
\frac{1 - \cos x}{x \cdot x}
\begin{array}{l}
\mathbf{if}\;x \le -0.03415862644372414:\\
\;\;\;\;\left(1 - \cos x\right) \cdot \frac{1}{x \cdot x}\\

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

\mathbf{else}:\\
\;\;\;\;\frac{1}{x \cdot x} - \frac{\cos x}{x \cdot x}\\

\end{array}
double f(double x) {
        double r36768 = 1.0;
        double r36769 = x;
        double r36770 = cos(r36769);
        double r36771 = r36768 - r36770;
        double r36772 = r36769 * r36769;
        double r36773 = r36771 / r36772;
        return r36773;
}

double f(double x) {
        double r36774 = x;
        double r36775 = -0.03415862644372414;
        bool r36776 = r36774 <= r36775;
        double r36777 = 1.0;
        double r36778 = cos(r36774);
        double r36779 = r36777 - r36778;
        double r36780 = 1.0;
        double r36781 = r36774 * r36774;
        double r36782 = r36780 / r36781;
        double r36783 = r36779 * r36782;
        double r36784 = 0.03476390489487963;
        bool r36785 = r36774 <= r36784;
        double r36786 = 2.0;
        double r36787 = pow(r36774, r36786);
        double r36788 = -0.041666666666666664;
        double r36789 = 0.001388888888888889;
        double r36790 = 4.0;
        double r36791 = pow(r36774, r36790);
        double r36792 = 0.5;
        double r36793 = fma(r36789, r36791, r36792);
        double r36794 = fma(r36787, r36788, r36793);
        double r36795 = r36777 / r36781;
        double r36796 = r36778 / r36781;
        double r36797 = r36795 - r36796;
        double r36798 = r36785 ? r36794 : r36797;
        double r36799 = r36776 ? r36783 : r36798;
        return r36799;
}

Error

Bits error versus x

Derivation

  1. Split input into 3 regimes
  2. if x < -0.03415862644372414

    1. Initial program 1.1

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. Using strategy rm
    3. Applied div-inv1.1

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

    if -0.03415862644372414 < x < 0.03476390489487963

    1. Initial program 62.2

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. 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}}\]
    3. Simplified0.0

      \[\leadsto \color{blue}{\mathsf{fma}\left({x}^{2}, \frac{-1}{24}, \mathsf{fma}\left(\frac{1}{720}, {x}^{4}, \frac{1}{2}\right)\right)}\]

    if 0.03476390489487963 < x

    1. Initial program 1.2

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. Using strategy rm
    3. Applied div-sub1.3

      \[\leadsto \color{blue}{\frac{1}{x \cdot x} - \frac{\cos x}{x \cdot x}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.6

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

Reproduce

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