Average Error: 39.7 → 15.8
Time: 6.5s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -1.4155618696900624 \cdot 10^{-10}:\\ \;\;\;\;\frac{{\left(\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right)\right)}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon, \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) + \cos x, \cos x \cdot \cos x\right)}\\ \mathbf{elif}\;\varepsilon \le 1.23057486602459758 \cdot 10^{-7}:\\ \;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.4155618696900624 \cdot 10^{-10}:\\
\;\;\;\;\frac{{\left(\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right)\right)}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon, \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) + \cos x, \cos x \cdot \cos x\right)}\\

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

\mathbf{else}:\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\right)\\

\end{array}
double f(double x, double eps) {
        double r49918 = x;
        double r49919 = eps;
        double r49920 = r49918 + r49919;
        double r49921 = cos(r49920);
        double r49922 = cos(r49918);
        double r49923 = r49921 - r49922;
        return r49923;
}

double f(double x, double eps) {
        double r49924 = eps;
        double r49925 = -1.4155618696900624e-10;
        bool r49926 = r49924 <= r49925;
        double r49927 = x;
        double r49928 = cos(r49927);
        double r49929 = cos(r49924);
        double r49930 = sin(r49924);
        double r49931 = sin(r49927);
        double r49932 = r49930 * r49931;
        double r49933 = -r49932;
        double r49934 = fma(r49928, r49929, r49933);
        double r49935 = 3.0;
        double r49936 = pow(r49934, r49935);
        double r49937 = pow(r49928, r49935);
        double r49938 = r49936 - r49937;
        double r49939 = r49929 * r49928;
        double r49940 = r49931 * r49930;
        double r49941 = r49939 - r49940;
        double r49942 = r49934 + r49928;
        double r49943 = r49928 * r49928;
        double r49944 = fma(r49941, r49942, r49943);
        double r49945 = r49938 / r49944;
        double r49946 = 1.2305748660245976e-07;
        bool r49947 = r49924 <= r49946;
        double r49948 = 1.0;
        double r49949 = pow(r49924, r49935);
        double r49950 = 0.041666666666666664;
        double r49951 = r49949 * r49950;
        double r49952 = 0.5;
        double r49953 = fma(r49952, r49924, r49927);
        double r49954 = r49951 - r49953;
        double r49955 = r49924 * r49954;
        double r49956 = r49948 * r49955;
        double r49957 = fma(r49931, r49930, r49928);
        double r49958 = expm1(r49957);
        double r49959 = log1p(r49958);
        double r49960 = -r49959;
        double r49961 = fma(r49929, r49928, r49960);
        double r49962 = r49948 * r49961;
        double r49963 = r49947 ? r49956 : r49962;
        double r49964 = r49926 ? r49945 : r49963;
        return r49964;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -1.4155618696900624e-10

    1. Initial program 31.0

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

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

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

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

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

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

    if -1.4155618696900624e-10 < eps < 1.2305748660245976e-07

    1. Initial program 49.1

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

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

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

      \[\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-identity48.8

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

      \[\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--48.8

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

      \[\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.7

      \[\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.7

      \[\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)}\]

    if 1.2305748660245976e-07 < eps

    1. Initial program 30.3

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Using strategy rm
    3. Applied cos-sum1.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-neg1.1

      \[\leadsto \color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin x \cdot \sin \varepsilon\right)} - \cos x\]
    6. Simplified1.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-identity1.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-identity1.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--1.1

      \[\leadsto \color{blue}{1 \cdot \left(\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) - \cos x\right)}\]
    11. Simplified1.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 log1p-expm1-u1.2

      \[\leadsto 1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)}\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification15.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -1.4155618696900624 \cdot 10^{-10}:\\ \;\;\;\;\frac{{\left(\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right)\right)}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon, \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) + \cos x, \cos x \cdot \cos x\right)}\\ \mathbf{elif}\;\varepsilon \le 1.23057486602459758 \cdot 10^{-7}:\\ \;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\right)\\ \end{array}\]

Reproduce

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