Average Error: 40.1 → 16.2
Time: 9.1s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -1.1888021786142176 \cdot 10^{-8} \lor \neg \left(\varepsilon \le 7.56729564966743332 \cdot 10^{-6}\right):\\ \;\;\;\;\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\sin x \cdot \sin \varepsilon + \cos x\right)}^{3}}{\left(\sin x \cdot \sin \varepsilon + \cos x\right) \cdot \frac{\left(\sin x \cdot \sin \varepsilon + \cos x\right) \cdot \left(\sin x \cdot \sin \varepsilon + \cos x\right) + \left(-{\left(\cos x\right)}^{2} \cdot {\left(\cos \varepsilon\right)}^{2}\right)}{\left(\sin x \cdot \sin \varepsilon + \cos x\right) - \cos x \cdot \cos \varepsilon} + \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)}\\ \mathbf{else}:\\ \;\;\;\;\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.1888021786142176 \cdot 10^{-8} \lor \neg \left(\varepsilon \le 7.56729564966743332 \cdot 10^{-6}\right):\\
\;\;\;\;\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\sin x \cdot \sin \varepsilon + \cos x\right)}^{3}}{\left(\sin x \cdot \sin \varepsilon + \cos x\right) \cdot \frac{\left(\sin x \cdot \sin \varepsilon + \cos x\right) \cdot \left(\sin x \cdot \sin \varepsilon + \cos x\right) + \left(-{\left(\cos x\right)}^{2} \cdot {\left(\cos \varepsilon\right)}^{2}\right)}{\left(\sin x \cdot \sin \varepsilon + \cos x\right) - \cos x \cdot \cos \varepsilon} + \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)}\\

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

\end{array}
double f(double x, double eps) {
        double r74123 = x;
        double r74124 = eps;
        double r74125 = r74123 + r74124;
        double r74126 = cos(r74125);
        double r74127 = cos(r74123);
        double r74128 = r74126 - r74127;
        return r74128;
}

double f(double x, double eps) {
        double r74129 = eps;
        double r74130 = -1.1888021786142176e-08;
        bool r74131 = r74129 <= r74130;
        double r74132 = 7.567295649667433e-06;
        bool r74133 = r74129 <= r74132;
        double r74134 = !r74133;
        bool r74135 = r74131 || r74134;
        double r74136 = x;
        double r74137 = cos(r74136);
        double r74138 = cos(r74129);
        double r74139 = r74137 * r74138;
        double r74140 = 3.0;
        double r74141 = pow(r74139, r74140);
        double r74142 = sin(r74136);
        double r74143 = sin(r74129);
        double r74144 = r74142 * r74143;
        double r74145 = r74144 + r74137;
        double r74146 = pow(r74145, r74140);
        double r74147 = r74141 - r74146;
        double r74148 = r74145 * r74145;
        double r74149 = 2.0;
        double r74150 = pow(r74137, r74149);
        double r74151 = pow(r74138, r74149);
        double r74152 = r74150 * r74151;
        double r74153 = -r74152;
        double r74154 = r74148 + r74153;
        double r74155 = r74145 - r74139;
        double r74156 = r74154 / r74155;
        double r74157 = r74145 * r74156;
        double r74158 = r74139 * r74139;
        double r74159 = r74157 + r74158;
        double r74160 = r74147 / r74159;
        double r74161 = 0.16666666666666666;
        double r74162 = pow(r74136, r74140);
        double r74163 = r74161 * r74162;
        double r74164 = r74163 - r74136;
        double r74165 = 0.5;
        double r74166 = r74129 * r74165;
        double r74167 = r74164 - r74166;
        double r74168 = r74129 * r74167;
        double r74169 = r74135 ? r74160 : r74168;
        return r74169;
}

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 < -1.1888021786142176e-08 or 7.567295649667433e-06 < eps

    1. Initial program 31.2

      \[\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. Applied associate--l-1.1

      \[\leadsto \color{blue}{\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon + \cos x\right)}\]
    5. Using strategy rm
    6. Applied flip3--1.3

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

      \[\leadsto \frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\sin x \cdot \sin \varepsilon + \cos x\right)}^{3}}{\color{blue}{\left(\sin x \cdot \sin \varepsilon + \cos x\right) \cdot \left(\left(\sin x \cdot \sin \varepsilon + \cos x\right) + \cos x \cdot \cos \varepsilon\right) + \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)}}\]
    8. Using strategy rm
    9. Applied flip-+1.3

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

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

    if -1.1888021786142176e-08 < eps < 7.567295649667433e-06

    1. Initial program 49.1

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Taylor expanded around 0 31.5

      \[\leadsto \color{blue}{\frac{1}{6} \cdot \left({x}^{3} \cdot \varepsilon\right) - \left(x \cdot \varepsilon + \frac{1}{2} \cdot {\varepsilon}^{2}\right)}\]
    3. Simplified31.5

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

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

Reproduce

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