Как записать (-1)^(k+1) без использования функции pow?
Asked
Active
Viewed 565 times
11
αλεχολυτ
- 28,987
- 13
- 60
- 119
Dzianis Papchanka
- 149
- 7
6 Answers
10
Мне понравился ответ @Mira и @tutankhamun
Но если используете это выражение в цикле есть еще более оптимальный
c = -c;
К примеру
c = -1;
for(int k=0; k<n;k++){
// дествие с значение (-1)^(k+1) исползуете пересенное _c_
c = -c; // меняем значение _c_
}
Saidolim
- 8,341
- 4
- 26
- 48
-
2
-
-
Не минусовал, но зачем цикл, если знак результата напрямую зависит от модуля степени по двойке? – Kromster Mar 16 '16 at 09:32
-
1@KromStern про цикл сказано в контексте того, что он уже есть и нужно получить значение для
(-1)^(k+1)в процессе прохода по циклу. – αλεχολυτ Mar 16 '16 at 10:07
5
Вот еще вариант, для тех кто понимает, без условных операторов:
1 - 2 * (k % 2)
Cerbo
- 6,863
-
1Имхо самый лучший, это как раз без ветвления, например в
glslэто сильно предпочтительнее – Stranger in the Q Jun 26 '19 at 09:01 -
-
1Можно и так конечно, скобки для того чтобы не вспоминать приоритеты. Я однажды ошибся в приоритете тернарного обператора и запятой и жестоко за это поплатился жестким, противоестественным, ночным сексом с отладчиком. – Cerbo Jun 26 '19 at 14:46
pow()было бы не отказаться или дажеpow()вообще не подходил бы. – tutankhamun Dec 18 '15 at 07:56n/m(т.е. в виде обыкновенной дроби) иm- нечетное, то безpowможно обойтись. – αλεχολυτ Mar 16 '16 at 10:01pow()получится обойтись всегда, поскольку для целых чисел есть простые и достойные замены, а возведение-1в степень, являющуюся нецелым двоичным числом с ограниченной точностью даст комплексное значение, поскольку такое число представить в виде дроби с нечетным знаменателем не получится – tutankhamun Mar 16 '16 at 13:57