Error de pecado, cos, bronceado y redondeo.

Estoy haciendo algunos cálculos de trigonometría en C / C ++ y tengo problemas con los errores de redondeo. Por ejemplo, en mi sistema Linux:

#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[]) {
    printf("%e\n", sin(M_PI));
    return 0;
}

Este programa da la siguiente salida:

1.224647e-16

cuando la respuesta correcta es, por supuesto, 0.

¿Cuánto error de redondeo puedo esperar al usar funciones trigonométricas? ¿Cómo puedo manejar mejor ese error? Estoy familiarizado con la técnica de Unidades en el último lugar para comparar números de punto flotante, de Bruce DawsonComparación de números de punto flotante, pero eso no parece funcionar aquí, ya que 0 y 1.22e-16 son unos pocos ULP aparte.

Respuestas a la pregunta(9)

Su respuesta a la pregunta