Average Error: 31.0 → 0.4
Time: 4.4s
Precision: 64
\[\frac{1 - \cos x}{x \cdot x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.029735392258237861:\\ \;\;\;\;\frac{\frac{\sqrt[3]{{\left(1 - \cos x\right)}^{3}}}{x}}{x}\\ \mathbf{elif}\;x \le 0.033264802814976693:\\ \;\;\;\;\mathsf{fma}\left({x}^{4}, \frac{1}{720}, \frac{1}{2} - \frac{1}{24} \cdot {x}^{2}\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.029735392258237861:\\
\;\;\;\;\frac{\frac{\sqrt[3]{{\left(1 - \cos x\right)}^{3}}}{x}}{x}\\

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

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

\end{array}
double f(double x) {
        double r28290 = 1.0;
        double r28291 = x;
        double r28292 = cos(r28291);
        double r28293 = r28290 - r28292;
        double r28294 = r28291 * r28291;
        double r28295 = r28293 / r28294;
        return r28295;
}

double f(double x) {
        double r28296 = x;
        double r28297 = -0.02973539225823786;
        bool r28298 = r28296 <= r28297;
        double r28299 = 1.0;
        double r28300 = cos(r28296);
        double r28301 = r28299 - r28300;
        double r28302 = 3.0;
        double r28303 = pow(r28301, r28302);
        double r28304 = cbrt(r28303);
        double r28305 = r28304 / r28296;
        double r28306 = r28305 / r28296;
        double r28307 = 0.03326480281497669;
        bool r28308 = r28296 <= r28307;
        double r28309 = 4.0;
        double r28310 = pow(r28296, r28309);
        double r28311 = 0.001388888888888889;
        double r28312 = 0.5;
        double r28313 = 0.041666666666666664;
        double r28314 = 2.0;
        double r28315 = pow(r28296, r28314);
        double r28316 = r28313 * r28315;
        double r28317 = r28312 - r28316;
        double r28318 = fma(r28310, r28311, r28317);
        double r28319 = r28296 * r28296;
        double r28320 = r28299 / r28319;
        double r28321 = r28300 / r28319;
        double r28322 = r28320 - r28321;
        double r28323 = r28308 ? r28318 : r28322;
        double r28324 = r28298 ? r28306 : r28323;
        return r28324;
}

Error

Bits error versus x

Derivation

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

    1. Initial program 1.1

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

      \[\leadsto \color{blue}{\frac{\frac{1 - \cos x}{x}}{x}}\]
    4. Using strategy rm
    5. Applied add-cbrt-cube0.6

      \[\leadsto \frac{\frac{\color{blue}{\sqrt[3]{\left(\left(1 - \cos x\right) \cdot \left(1 - \cos x\right)\right) \cdot \left(1 - \cos x\right)}}}{x}}{x}\]
    6. Simplified0.6

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

    if -0.02973539225823786 < x < 0.03326480281497669

    1. Initial program 62.4

      \[\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}^{4}, \frac{1}{720}, \frac{1}{2} - \frac{1}{24} \cdot {x}^{2}\right)}\]

    if 0.03326480281497669 < x

    1. Initial program 1.0

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

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

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

Reproduce

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