grzech, cos, opalenizna i błąd zaokrąglania

Wykonuję kilka obliczeń trygonometrii w C / C ++ i napotykam problemy z błędami zaokrąglania. Na przykład w moim systemie Linux:

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

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

Ten program daje następujące dane wyjściowe:

1.224647e-16

kiedy prawidłowa odpowiedź jest oczywiście 0.

Jakiego błędu zaokrąglenia mogę się spodziewać podczas korzystania z funkcji wyzwalających? Jak najlepiej radzić sobie z tym błędem? Znam technikę Jednostek w Ostatnim Miejscu do porównywania liczb zmiennoprzecinkowych z Bruce'a DawsonaPorównywanie liczb zmiennoprzecinkowych, ale to nie wydaje się działać tutaj, ponieważ 0 i 1.22e-16 są całkiem spore.

questionAnswers(9)

yourAnswerToTheQuestion