Average Error: 39.2 → 0.7
Time: 12.5s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -2.850613893539446240586818920315081982153 \cdot 10^{-6} \lor \neg \left(\varepsilon \le 5.448146684575087654589520269610147806816 \cdot 10^{-4}\right):\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;-2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.850613893539446240586818920315081982153 \cdot 10^{-6} \lor \neg \left(\varepsilon \le 5.448146684575087654589520269610147806816 \cdot 10^{-4}\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\

\mathbf{else}:\\
\;\;\;\;-2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\

\end{array}
double f(double x, double eps) {
        double r60263 = x;
        double r60264 = eps;
        double r60265 = r60263 + r60264;
        double r60266 = cos(r60265);
        double r60267 = cos(r60263);
        double r60268 = r60266 - r60267;
        return r60268;
}

double f(double x, double eps) {
        double r60269 = eps;
        double r60270 = -2.8506138935394462e-06;
        bool r60271 = r60269 <= r60270;
        double r60272 = 0.0005448146684575088;
        bool r60273 = r60269 <= r60272;
        double r60274 = !r60273;
        bool r60275 = r60271 || r60274;
        double r60276 = x;
        double r60277 = cos(r60276);
        double r60278 = cos(r60269);
        double r60279 = r60277 * r60278;
        double r60280 = sin(r60276);
        double r60281 = sin(r60269);
        double r60282 = r60280 * r60281;
        double r60283 = r60279 - r60282;
        double r60284 = r60283 - r60277;
        double r60285 = -2.0;
        double r60286 = 2.0;
        double r60287 = r60269 / r60286;
        double r60288 = sin(r60287);
        double r60289 = r60276 + r60269;
        double r60290 = r60289 + r60276;
        double r60291 = r60290 / r60286;
        double r60292 = sin(r60291);
        double r60293 = r60288 * r60292;
        double r60294 = r60285 * r60293;
        double r60295 = r60275 ? r60284 : r60294;
        return r60295;
}

Error

Bits error versus x

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if eps < -2.8506138935394462e-06 or 0.0005448146684575088 < eps

    1. Initial program 29.2

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]

    if -2.8506138935394462e-06 < eps < 0.0005448146684575088

    1. Initial program 49.5

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

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

      \[\leadsto -2 \cdot \color{blue}{\left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -2.850613893539446240586818920315081982153 \cdot 10^{-6} \lor \neg \left(\varepsilon \le 5.448146684575087654589520269610147806816 \cdot 10^{-4}\right):\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;-2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019351 
(FPCore (x eps)
  :name "2cos (problem 3.3.5)"
  :precision binary64
  (- (cos (+ x eps)) (cos x)))