Average Error: 39.7 → 16.0
Time: 6.7s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -3.21001947811687037525689421214365347132 \cdot 10^{-11}:\\ \;\;\;\;1 \cdot \left(\cos \varepsilon \cdot \cos x + \left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\\ \mathbf{elif}\;\varepsilon \le 3.097623705192343513450383904461737927249 \cdot 10^{-6}:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3} + {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\sin x \cdot \sin \varepsilon, \sin x \cdot \sin \varepsilon - \cos x, \cos x \cdot \cos x\right)}\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.21001947811687037525689421214365347132 \cdot 10^{-11}:\\
\;\;\;\;1 \cdot \left(\cos \varepsilon \cdot \cos x + \left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\\

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

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

\end{array}
double f(double x, double eps) {
        double r91817 = x;
        double r91818 = eps;
        double r91819 = r91817 + r91818;
        double r91820 = cos(r91819);
        double r91821 = cos(r91817);
        double r91822 = r91820 - r91821;
        return r91822;
}

double f(double x, double eps) {
        double r91823 = eps;
        double r91824 = -3.2100194781168704e-11;
        bool r91825 = r91823 <= r91824;
        double r91826 = 1.0;
        double r91827 = cos(r91823);
        double r91828 = x;
        double r91829 = cos(r91828);
        double r91830 = r91827 * r91829;
        double r91831 = sin(r91828);
        double r91832 = sin(r91823);
        double r91833 = fma(r91831, r91832, r91829);
        double r91834 = -r91833;
        double r91835 = r91830 + r91834;
        double r91836 = r91826 * r91835;
        double r91837 = 3.0976237051923435e-06;
        bool r91838 = r91823 <= r91837;
        double r91839 = 0.041666666666666664;
        double r91840 = 4.0;
        double r91841 = pow(r91823, r91840);
        double r91842 = 0.5;
        double r91843 = 2.0;
        double r91844 = pow(r91823, r91843);
        double r91845 = r91842 * r91844;
        double r91846 = fma(r91828, r91823, r91845);
        double r91847 = -r91846;
        double r91848 = fma(r91839, r91841, r91847);
        double r91849 = r91826 * r91848;
        double r91850 = r91831 * r91832;
        double r91851 = 3.0;
        double r91852 = pow(r91850, r91851);
        double r91853 = pow(r91829, r91851);
        double r91854 = r91852 + r91853;
        double r91855 = r91850 - r91829;
        double r91856 = r91829 * r91829;
        double r91857 = fma(r91850, r91855, r91856);
        double r91858 = r91854 / r91857;
        double r91859 = -r91858;
        double r91860 = fma(r91827, r91829, r91859);
        double r91861 = r91826 * r91860;
        double r91862 = r91838 ? r91849 : r91861;
        double r91863 = r91825 ? r91836 : r91862;
        return r91863;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -3.2100194781168704e-11

    1. Initial program 30.5

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied *-un-lft-identity1.7

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{1 \cdot \cos x}\]
    6. Applied *-un-lft-identity1.7

      \[\leadsto \color{blue}{1 \cdot \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - 1 \cdot \cos x\]
    7. Applied distribute-lft-out--1.7

      \[\leadsto \color{blue}{1 \cdot \left(\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\right)}\]
    8. Simplified1.6

      \[\leadsto 1 \cdot \color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    9. Using strategy rm
    10. Applied fma-udef1.6

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

    if -3.2100194781168704e-11 < eps < 3.0976237051923435e-06

    1. Initial program 49.4

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied *-un-lft-identity49.0

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

      \[\leadsto \color{blue}{1 \cdot \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - 1 \cdot \cos x\]
    7. Applied distribute-lft-out--49.0

      \[\leadsto \color{blue}{1 \cdot \left(\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\right)}\]
    8. Simplified49.0

      \[\leadsto 1 \cdot \color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    9. Using strategy rm
    10. Applied fma-udef49.0

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

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

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

    if 3.0976237051923435e-06 < eps

    1. Initial program 30.4

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied *-un-lft-identity1.0

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{1 \cdot \cos x}\]
    6. Applied *-un-lft-identity1.0

      \[\leadsto \color{blue}{1 \cdot \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - 1 \cdot \cos x\]
    7. Applied distribute-lft-out--1.0

      \[\leadsto \color{blue}{1 \cdot \left(\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\right)}\]
    8. Simplified0.9

      \[\leadsto 1 \cdot \color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    9. Using strategy rm
    10. Applied fma-udef1.0

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

      \[\leadsto 1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\color{blue}{\frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3} + {\left(\cos x\right)}^{3}}{\left(\sin x \cdot \sin \varepsilon\right) \cdot \left(\sin x \cdot \sin \varepsilon\right) + \left(\cos x \cdot \cos x - \left(\sin x \cdot \sin \varepsilon\right) \cdot \cos x\right)}}\right)\]
    13. Simplified1.0

      \[\leadsto 1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3} + {\left(\cos x\right)}^{3}}{\color{blue}{\mathsf{fma}\left(\sin x \cdot \sin \varepsilon, \sin x \cdot \sin \varepsilon - \cos x, \cos x \cdot \cos x\right)}}\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification16.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -3.21001947811687037525689421214365347132 \cdot 10^{-11}:\\ \;\;\;\;1 \cdot \left(\cos \varepsilon \cdot \cos x + \left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\\ \mathbf{elif}\;\varepsilon \le 3.097623705192343513450383904461737927249 \cdot 10^{-6}:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3} + {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\sin x \cdot \sin \varepsilon, \sin x \cdot \sin \varepsilon - \cos x, \cos x \cdot \cos x\right)}\right)\\ \end{array}\]

Reproduce

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