(-1)^n elde etmek için doğru yolu nedir?
Birçok algoritma* *3 (Her ikisi de tamsayı), genellikle bir dizi bir faktör olarak hesaplamak için gerektirir. Yani, tek n için -1 ve hatta n 1 olan bir faktör. C veya C bir ortamda, sık sık görür:
#include<iostream>
#include<cmath>
int main(){
int n = 13;
std::cout << std::pow(-1, n) << std::endl;
}
Daha iyi ya da olaÄŸan Kongre nedir?(veya baÅŸka bir ÅŸey),
std::pow(-1, n)
std::pow(-1, n%2)
(n%2?-1:1)
(1-2*(n%2)) // (gives incorrect value for negative n)
EDİT: Buna ek olarak, kullanıcı @SeverinPappadeux başka bir alternatif dayanarak (küresel) önerilen dizi aramaları. Benim yorumum:
const int res[] {-1, 1, -1}; // three elements are needed for negative modulo results
const int* const m1pow = res 1;
...
m1pow[n%2]
CEVAP
Eğer optimize edilmiş yani süper Bilgiç, er olmak istiyorsanız n % 2 * 2 yerine << 1 yerine (n & 1) kullanabilirsiniz.^ br .
8086 işlemci olarak hesaplamak için en hızlı yoludur:
1 - ((n & 1) << 1)
Ben sadece bu cevap nereden geldiğini açıklamak istiyorum. Orijinal poster alfC (-1)^n hesaplamak için farklı yollar olup diğerlerinden daha hızlı bir sürü gönderme konusunda harika bir iş yaptı.^ br . İşlemciler onlar kadar hızlı olmak ve Derleyiciler biz de onlar kadar iyi olmak en iyi duruma getirme ile günümüzdegenellikleişlemi birkaç CPU döngüleri tıraş bile önemsiz ufak gelişmeler üzerine okunabilirlik değeri.^ br . Tek seferde dünya ve MUL operasyonları ve yozlaşmış olduğunu hükmetti Derleyiciler bir zaman vardı; o günlerde 2 güç bir operasyon karşılıksız optimizasyonu için davet edildi.

Bahar Güvenlik kullanırken, fasulye ge...
Objective-C boÅŸ bir dize kontrol etmek...
Boş XML öğeleri temsil etmek için doğr...
Tek örnek bir uygulama oluşturmak için...
Bir ağaca doğru düz bir masa ayrıştırm...