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

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

\end{array}
double f(double x) {
        double r21935 = 1.0;
        double r21936 = x;
        double r21937 = cos(r21936);
        double r21938 = r21935 - r21937;
        double r21939 = r21936 * r21936;
        double r21940 = r21938 / r21939;
        return r21940;
}

double f(double x) {
        double r21941 = x;
        double r21942 = -0.030963531967900033;
        bool r21943 = r21941 <= r21942;
        double r21944 = 0.029848537881546774;
        bool r21945 = r21941 <= r21944;
        double r21946 = !r21945;
        bool r21947 = r21943 || r21946;
        double r21948 = 1.0;
        double r21949 = 1.0;
        double r21950 = cos(r21941);
        double r21951 = r21949 - r21950;
        double r21952 = log(r21951);
        double r21953 = exp(r21952);
        double r21954 = r21941 / r21953;
        double r21955 = r21948 / r21954;
        double r21956 = r21955 / r21941;
        double r21957 = 0.001388888888888889;
        double r21958 = 4.0;
        double r21959 = pow(r21941, r21958);
        double r21960 = 0.5;
        double r21961 = fma(r21957, r21959, r21960);
        double r21962 = 0.041666666666666664;
        double r21963 = 2.0;
        double r21964 = pow(r21941, r21963);
        double r21965 = r21962 * r21964;
        double r21966 = r21961 - r21965;
        double r21967 = r21947 ? r21956 : r21966;
        return r21967;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -0.030963531967900033 or 0.029848537881546774 < x

    1. Initial program 1.0

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. Using strategy rm
    3. Applied associate-/r*0.5

      \[\leadsto \color{blue}{\frac{\frac{1 - \cos x}{x}}{x}}\]
    4. Using strategy rm
    5. Applied clear-num0.5

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{x}{1 - \cos x}}}}{x}\]
    6. Using strategy rm
    7. Applied add-exp-log0.5

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

    if -0.030963531967900033 < x < 0.029848537881546774

    1. Initial program 62.4

      \[\frac{1 - \cos x}{x \cdot x}\]
    2. Using strategy rm
    3. Applied associate-/r*61.5

      \[\leadsto \color{blue}{\frac{\frac{1 - \cos x}{x}}{x}}\]
    4. Using strategy rm
    5. Applied clear-num61.5

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{x}{1 - \cos x}}}}{x}\]
    6. 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}}\]
    7. Simplified0.0

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

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

Reproduce

herbie shell --seed 2019199 +o rules:numerics
(FPCore (x)
  :name "cos2 (problem 3.4.1)"
  (/ (- 1.0 (cos x)) (* x x)))