Average Error: 39.8 → 0.3
Time: 7.9s
Precision: binary64
\[\cos \left(x + \varepsilon\right) - \cos x \]
\[\left(\tan \left(\frac{\varepsilon}{2}\right) \cdot \sin \varepsilon\right) \cdot \left(-\cos x\right) - \sin \varepsilon \cdot \sin x \]
(FPCore (x eps) :precision binary64 (- (cos (+ x eps)) (cos x)))
(FPCore (x eps)
 :precision binary64
 (- (* (* (tan (/ eps 2.0)) (sin eps)) (- (cos x))) (* (sin eps) (sin x))))
double code(double x, double eps) {
	return cos((x + eps)) - cos(x);
}
double code(double x, double eps) {
	return ((tan((eps / 2.0)) * sin(eps)) * -cos(x)) - (sin(eps) * sin(x));
}
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    code = cos((x + eps)) - cos(x)
end function
real(8) function code(x, eps)
    real(8), intent (in) :: x
    real(8), intent (in) :: eps
    code = ((tan((eps / 2.0d0)) * sin(eps)) * -cos(x)) - (sin(eps) * sin(x))
end function
public static double code(double x, double eps) {
	return Math.cos((x + eps)) - Math.cos(x);
}
public static double code(double x, double eps) {
	return ((Math.tan((eps / 2.0)) * Math.sin(eps)) * -Math.cos(x)) - (Math.sin(eps) * Math.sin(x));
}
def code(x, eps):
	return math.cos((x + eps)) - math.cos(x)
def code(x, eps):
	return ((math.tan((eps / 2.0)) * math.sin(eps)) * -math.cos(x)) - (math.sin(eps) * math.sin(x))
function code(x, eps)
	return Float64(cos(Float64(x + eps)) - cos(x))
end
function code(x, eps)
	return Float64(Float64(Float64(tan(Float64(eps / 2.0)) * sin(eps)) * Float64(-cos(x))) - Float64(sin(eps) * sin(x)))
end
function tmp = code(x, eps)
	tmp = cos((x + eps)) - cos(x);
end
function tmp = code(x, eps)
	tmp = ((tan((eps / 2.0)) * sin(eps)) * -cos(x)) - (sin(eps) * sin(x));
end
code[x_, eps_] := N[(N[Cos[N[(x + eps), $MachinePrecision]], $MachinePrecision] - N[Cos[x], $MachinePrecision]), $MachinePrecision]
code[x_, eps_] := N[(N[(N[(N[Tan[N[(eps / 2.0), $MachinePrecision]], $MachinePrecision] * N[Sin[eps], $MachinePrecision]), $MachinePrecision] * (-N[Cos[x], $MachinePrecision])), $MachinePrecision] - N[(N[Sin[eps], $MachinePrecision] * N[Sin[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\cos \left(x + \varepsilon\right) - \cos x
\left(\tan \left(\frac{\varepsilon}{2}\right) \cdot \sin \varepsilon\right) \cdot \left(-\cos x\right) - \sin \varepsilon \cdot \sin x

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. Initial program 39.8

    \[\cos \left(x + \varepsilon\right) - \cos x \]
  2. Applied egg-rr25.3

    \[\leadsto \color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)} \]
  3. Taylor expanded in x around inf 25.3

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

    \[\leadsto \color{blue}{\cos x \cdot \left(\cos \varepsilon + -1\right) - \sin \varepsilon \cdot \sin x} \]
  5. Applied egg-rr0.6

    \[\leadsto \cos x \cdot \color{blue}{\frac{-{\sin \varepsilon}^{2}}{\cos \varepsilon + 1}} - \sin \varepsilon \cdot \sin x \]
  6. Taylor expanded in eps around inf 0.6

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

    \[\leadsto \cos x \cdot \color{blue}{\left(\tan \left(\frac{\varepsilon}{2}\right) \cdot \left(-\sin \varepsilon\right)\right)} - \sin \varepsilon \cdot \sin x \]
  8. Final simplification0.3

    \[\leadsto \left(\tan \left(\frac{\varepsilon}{2}\right) \cdot \sin \varepsilon\right) \cdot \left(-\cos x\right) - \sin \varepsilon \cdot \sin x \]

Reproduce

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