Mientras que una función de $f : A \to B$ es un triple, que consiste en un dominio de $A$, un codominio $B$ y una regla que asigna a cada elemento de a $x \in A$ exactamente un elemento $f(x) \in B$, también muchos se centran exclusivamente en regla y olvidar cuidadosamente especificar el dominio y el codominio.
En este caso, la función en cuestión es $f : \mathcal F \times \mathcal F \rightarrow \mathbb R$ donde $$f(x,y) = \sin(x) - \sin(y),$$
y $\mathcal F$ es el conjunto de los números de la máquina, digamos, de doble precisión de punto flotante los números. Voy a explicar a continuación por qué yo sé que este es el derecho de dominio.
El problema de calcular una diferencia $d = a - b$ entre dos números reales $a$ $b$ es mal condicionado al $a \approx b$. De hecho, si $\hat{a} = a(1+\delta_a)$ $\hat{b} = b(1 + \delta_b)$ son los mejores disponibles aproximaciones de $a$$b$, entonces no podemos esperanza para calcular una mejor aproximación a $d$$\hat{d} = \hat{a} - \hat{b}$. El error relativo $$r = \frac{d - \hat{d}}{d},$$
satisface el obligado
$$ |r| \leq \frac{|a| + |b|}{|a-b|} \max\{|\delta_a|,|\delta_b|\}$$
Al $a \approx b$, no podemos garantizar que la diferencia de $d$ es calculado con un pequeño error relativo. En la práctica, el error relativo es grande. Decimos que la resta magnifica el error cometido al sustituir $a$$\hat{a}$$b$$\hat{b}$.
En su situación $a = \sin(x)$$b = \sin(y)$. Se cometen errores en el cómputo de la función seno. No importa que estamos, lo mejor que podemos esperar es para obtener la representación de coma flotante de $a$, es decir, $\text{fl}(a) = \sin(x)(1 + \delta)$ donde $|\delta| \leq u$ $u$ es la unidad de redondeo. Por qué? El equipo puede también tener más registros para uso interno, pero eventualmente, el resultado tiene que ser redondeado a, digamos, de doble precisión, por lo que el resultado puede ser almacenado en la memoria. De ello se sigue, que si calculamos el $f$ utilizando la definición y $x \approx y$, entonces el resultado calculado se han error relativo que es muchas veces la unidad de redondeo.
Con el fin de evitar el delito de sustracción, nos dirigimos a la función de $g : \mathcal F \times \mathcal F \to \mathbb R$ dada por
$$ g(x,y) = 2 \cos \left( \frac{x+y}{2} \right) \sin \left(\frac{x-y}{2} \right)$$
En ausencia de errores de redondeo $f(x,y) = g(x,y)$, pero en aritmética de punto flotante se comportan de manera muy diferente. La resta de dos números de punto flotante $x$ $y$ es perfectamente seguro. De hecho, si $y/2 \leq x \leq 2y$, entonces la resta se realiza con un guardia dígitos, a continuación, $x-y$ es calculado exactamente.
No estamos en el claro, como $x + y$ no se necesita ser un número de punto flotante, pero es calculado con un error relativo delimitada por la unidad de redondeo. En el desafortunado caso de que $(x+y)/2 \approx (\frac{1}{2} + k) \pi$ donde $k \in \mathbb Z$ el cálculo de $g$ sufre por el hecho de que el coseno es mal condicionado cerca de la raíz.
Con un condicional para elegir la correcta expresiones nos permite abarcar un mayor subconjunto del dominio.
En general, ¿por qué $\mathcal F$ en lugar de $\mathbb R$? Considerar el problema más sencillo de computación $f : \mathbb R \rightarrow \mathbb R$. En general, usted no sabe el valor exacto de $x$, y lo mejor que puede esperar es $\hat{x}$, la representación de coma flotante de $x$. El impacto de este error es controlado por el estado número de $f$. No hay nada que usted puede hacer acerca de la ampliación de la condición de los números, excepto cambiar a mejor hardware de simular una unidad más pequeña de redondeo $u'$. Esto te deja con la tarea de computación $f(\hat{x})$ donde $\hat{x} \in \mathcal F$ es un número de máquina. Es por eso $\mathcal F$ es el dominio de la naturaleza durante esta
segunda etapa de diseño de un algoritmo para el cálculo de aproximaciones de $f : \mathbb R \to \mathbb R$.