Average Error: 40.0 → 15.9
Time: 6.2s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -3.9043345518077538 \cdot 10^{-4}:\\ \;\;\;\;\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)\\ \mathbf{elif}\;\varepsilon \le 2.2931718725747495 \cdot 10^{-15}:\\ \;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon}\right) - \cos x\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.9043345518077538 \cdot 10^{-4}:\\
\;\;\;\;\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)\\

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

\mathbf{else}:\\
\;\;\;\;\log \left(e^{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon}\right) - \cos x\\

\end{array}
double f(double x, double eps) {
        double r68827 = x;
        double r68828 = eps;
        double r68829 = r68827 + r68828;
        double r68830 = cos(r68829);
        double r68831 = cos(r68827);
        double r68832 = r68830 - r68831;
        return r68832;
}

double f(double x, double eps) {
        double r68833 = eps;
        double r68834 = -0.0003904334551807754;
        bool r68835 = r68833 <= r68834;
        double r68836 = cos(r68833);
        double r68837 = x;
        double r68838 = cos(r68837);
        double r68839 = sin(r68837);
        double r68840 = sin(r68833);
        double r68841 = fma(r68839, r68840, r68838);
        double r68842 = expm1(r68841);
        double r68843 = log1p(r68842);
        double r68844 = -r68843;
        double r68845 = fma(r68836, r68838, r68844);
        double r68846 = 2.2931718725747495e-15;
        bool r68847 = r68833 <= r68846;
        double r68848 = 3.0;
        double r68849 = pow(r68833, r68848);
        double r68850 = 0.041666666666666664;
        double r68851 = r68849 * r68850;
        double r68852 = 0.5;
        double r68853 = fma(r68852, r68833, r68837);
        double r68854 = r68851 - r68853;
        double r68855 = r68833 * r68854;
        double r68856 = r68838 * r68836;
        double r68857 = r68839 * r68840;
        double r68858 = r68856 - r68857;
        double r68859 = exp(r68858);
        double r68860 = log(r68859);
        double r68861 = r68860 - r68838;
        double r68862 = r68847 ? r68855 : r68861;
        double r68863 = r68835 ? r68845 : r68862;
        return r68863;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -0.0003904334551807754

    1. Initial program 31.0

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Taylor expanded around inf 0.8

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    6. Using strategy rm
    7. Applied log1p-expm1-u0.8

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

    if -0.0003904334551807754 < eps < 2.2931718725747495e-15

    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. Taylor expanded around inf 49.0

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

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

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

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

    if 2.2931718725747495e-15 < eps

    1. Initial program 31.1

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

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

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \color{blue}{\log \left(e^{\sin x \cdot \sin \varepsilon}\right)}\right) - \cos x\]
    6. Applied add-log-exp2.6

      \[\leadsto \left(\color{blue}{\log \left(e^{\cos x \cdot \cos \varepsilon}\right)} - \log \left(e^{\sin x \cdot \sin \varepsilon}\right)\right) - \cos x\]
    7. Applied diff-log2.6

      \[\leadsto \color{blue}{\log \left(\frac{e^{\cos x \cdot \cos \varepsilon}}{e^{\sin x \cdot \sin \varepsilon}}\right)} - \cos x\]
    8. Simplified2.6

      \[\leadsto \log \color{blue}{\left(e^{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon}\right)} - \cos x\]
  3. Recombined 3 regimes into one program.
  4. Final simplification15.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -3.9043345518077538 \cdot 10^{-4}:\\ \;\;\;\;\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)\\ \mathbf{elif}\;\varepsilon \le 2.2931718725747495 \cdot 10^{-15}:\\ \;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon}\right) - \cos x\\ \end{array}\]

Reproduce

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