Average Error: 39.4 → 0.6
Time: 7.7s
Precision: binary64
\[\cos \left(x + \varepsilon\right) - \cos x \]
\[\cos x \cdot \frac{{\sin \varepsilon}^{2}}{-1 - \cos \varepsilon} - \sin \varepsilon \cdot \sin x \]
(FPCore (x eps) :precision binary64 (- (cos (+ x eps)) (cos x)))
(FPCore (x eps)
 :precision binary64
 (-
  (* (cos x) (/ (pow (sin eps) 2.0) (- -1.0 (cos eps))))
  (* (sin eps) (sin x))))
double code(double x, double eps) {
	return cos((x + eps)) - cos(x);
}
double code(double x, double eps) {
	return (cos(x) * (pow(sin(eps), 2.0) / (-1.0 - cos(eps)))) - (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 = (cos(x) * ((sin(eps) ** 2.0d0) / ((-1.0d0) - cos(eps)))) - (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.cos(x) * (Math.pow(Math.sin(eps), 2.0) / (-1.0 - Math.cos(eps)))) - (Math.sin(eps) * Math.sin(x));
}
def code(x, eps):
	return math.cos((x + eps)) - math.cos(x)
def code(x, eps):
	return (math.cos(x) * (math.pow(math.sin(eps), 2.0) / (-1.0 - math.cos(eps)))) - (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(cos(x) * Float64((sin(eps) ^ 2.0) / Float64(-1.0 - cos(eps)))) - Float64(sin(eps) * sin(x)))
end
function tmp = code(x, eps)
	tmp = cos((x + eps)) - cos(x);
end
function tmp = code(x, eps)
	tmp = (cos(x) * ((sin(eps) ^ 2.0) / (-1.0 - cos(eps)))) - (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[Cos[x], $MachinePrecision] * N[(N[Power[N[Sin[eps], $MachinePrecision], 2.0], $MachinePrecision] / N[(-1.0 - N[Cos[eps], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(N[Sin[eps], $MachinePrecision] * N[Sin[x], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\cos \left(x + \varepsilon\right) - \cos x
\cos x \cdot \frac{{\sin \varepsilon}^{2}}{-1 - \cos \varepsilon} - \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.4

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

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

    \[\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{-\left(-{\sin \varepsilon}^{2}\right)}{-\left(\cos \varepsilon + 1\right)}} - \sin \varepsilon \cdot \sin x \]
  6. Final simplification0.6

    \[\leadsto \cos x \cdot \frac{{\sin \varepsilon}^{2}}{-1 - \cos \varepsilon} - \sin \varepsilon \cdot \sin x \]

Reproduce

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