Многим алгоритмам требуется вычислить (-1)^n
(оба целых), как правило, в виде ряда. То есть коэффициент -1
для нечетных n и 1
для четного n. В среде C или С++ часто видят:
#include<iostream>
#include<cmath>
int main(){
int n = 13;
std::cout << std::pow(-1, n) << std::endl;
}
Что лучше или обычное соглашение? (или что-то еще),
std::pow(-1, n)
std::pow(-1, n%2)
(n%2?-1:1)
(1-2*(n%2)) // (gives incorrect value for negative n)
EDIT: Кроме того, пользователь @SeverinPappadeux предложил другую альтернативу, основанную на поиске массива (global?). Моя версия:
const int res[] {-1, 1, -1}; // three elements are needed for negative modulo results
const int* const m1pow = res + 1;
...
m1pow[n%2]