Surement parce que la fonction sin te retourne un double et que tu la mets dans un int, tu n'aurais pas un warning ? Conséquence, la valeurs ne rentre pas dans la zone mémoire délimité et déborde sur la zone mémoire à coté faussant donc les valeurs des variables suivantes.
Il faut faire très attention en C sur la gestion de la mémoire et les types de variable car à l'exécution tu peux avoir des surprises ...