Ваша проблема связана с -(m-period+1)
частью вашего звонка на pow
. period
объявлено как
unsigned int period = 1;
так что когда
-(m-period+1)
оценивается у вас
-(int - unsigned int + int)
== -(unsigned int)
так что вы получаете 360
как unsigned int
, и когда вы отрицаете его, оно оборачивается и становится очень большим числом (4294966936
для 32-битного int
). Это означает, что вы делаете
1.0033333333333334 ^ 4294966936
не
1.0033333333333334 ^ -360
Вам либо нужно сделать period
и int
, чтобы получить правильные результаты.
Если у вас есть число, которое не должно быть отрицательным, не используйте тип без знака. Ничто в unsigned
не останавливает отрицательные числа, оно просто превращает их в положительные числа. Если вы хотите убедиться, что число не является отрицательным, используйте тип со знаком и оператор if.