Average Error: 39.4 → 15.6
Time: 6.9s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -3.32396073668591 \cdot 10^{-19} \lor \neg \left(\varepsilon \le 1.984905203293518 \cdot 10^{-8}\right):\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\left(\sin x \cdot \sin \varepsilon + \cos x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.32396073668591 \cdot 10^{-19} \lor \neg \left(\varepsilon \le 1.984905203293518 \cdot 10^{-8}\right):\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\left(\sin x \cdot \sin \varepsilon + \cos x\right)\right)\\

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

\end{array}
double f(double x, double eps) {
        double r73908 = x;
        double r73909 = eps;
        double r73910 = r73908 + r73909;
        double r73911 = cos(r73910);
        double r73912 = cos(r73908);
        double r73913 = r73911 - r73912;
        return r73913;
}

double f(double x, double eps) {
        double r73914 = eps;
        double r73915 = -3.3239607366859096e-19;
        bool r73916 = r73914 <= r73915;
        double r73917 = 1.984905203293518e-08;
        bool r73918 = r73914 <= r73917;
        double r73919 = !r73918;
        bool r73920 = r73916 || r73919;
        double r73921 = 1.0;
        double r73922 = cos(r73914);
        double r73923 = x;
        double r73924 = cos(r73923);
        double r73925 = sin(r73923);
        double r73926 = sin(r73914);
        double r73927 = r73925 * r73926;
        double r73928 = r73927 + r73924;
        double r73929 = -r73928;
        double r73930 = fma(r73922, r73924, r73929);
        double r73931 = r73921 * r73930;
        double r73932 = 3.0;
        double r73933 = pow(r73914, r73932);
        double r73934 = 0.041666666666666664;
        double r73935 = r73933 * r73934;
        double r73936 = 0.5;
        double r73937 = fma(r73936, r73914, r73923);
        double r73938 = r73935 - r73937;
        double r73939 = r73914 * r73938;
        double r73940 = r73921 * r73939;
        double r73941 = r73920 ? r73931 : r73940;
        return r73941;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if eps < -3.3239607366859096e-19 or 1.984905203293518e-08 < eps

    1. Initial program 30.7

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Using strategy rm
    3. Applied cos-sum2.1

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied fma-neg2.1

      \[\leadsto \color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin x \cdot \sin \varepsilon\right)} - \cos x\]
    6. Simplified2.1

      \[\leadsto \mathsf{fma}\left(\cos x, \cos \varepsilon, \color{blue}{-\sin \varepsilon \cdot \sin x}\right) - \cos x\]
    7. Using strategy rm
    8. Applied *-un-lft-identity2.1

      \[\leadsto \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) - \color{blue}{1 \cdot \cos x}\]
    9. Applied *-un-lft-identity2.1

      \[\leadsto \color{blue}{1 \cdot \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right)} - 1 \cdot \cos x\]
    10. Applied distribute-lft-out--2.1

      \[\leadsto \color{blue}{1 \cdot \left(\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) - \cos x\right)}\]
    11. Simplified2.1

      \[\leadsto 1 \cdot \color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    12. Using strategy rm
    13. Applied fma-udef2.1

      \[\leadsto 1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\color{blue}{\left(\sin x \cdot \sin \varepsilon + \cos x\right)}\right)\]

    if -3.3239607366859096e-19 < eps < 1.984905203293518e-08

    1. Initial program 49.3

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Using strategy rm
    3. Applied cos-sum49.1

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied fma-neg49.1

      \[\leadsto \color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin x \cdot \sin \varepsilon\right)} - \cos x\]
    6. Simplified49.1

      \[\leadsto \mathsf{fma}\left(\cos x, \cos \varepsilon, \color{blue}{-\sin \varepsilon \cdot \sin x}\right) - \cos x\]
    7. Using strategy rm
    8. Applied *-un-lft-identity49.1

      \[\leadsto \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) - \color{blue}{1 \cdot \cos x}\]
    9. Applied *-un-lft-identity49.1

      \[\leadsto \color{blue}{1 \cdot \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right)} - 1 \cdot \cos x\]
    10. Applied distribute-lft-out--49.1

      \[\leadsto \color{blue}{1 \cdot \left(\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) - \cos x\right)}\]
    11. Simplified49.1

      \[\leadsto 1 \cdot \color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    12. Taylor expanded around 0 30.8

      \[\leadsto 1 \cdot \color{blue}{\left(\frac{1}{24} \cdot {\varepsilon}^{4} - \left(x \cdot \varepsilon + \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right)}\]
    13. Simplified30.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -3.32396073668591 \cdot 10^{-19} \lor \neg \left(\varepsilon \le 1.984905203293518 \cdot 10^{-8}\right):\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\left(\sin x \cdot \sin \varepsilon + \cos x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020034 +o rules:numerics
(FPCore (x eps)
  :name "2cos (problem 3.3.5)"
  :precision binary64
  (- (cos (+ x eps)) (cos x)))