SORU
17 Mart 2015, Salı


(-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
17 Mart 2015, Salı


Eğer optimize edilmiş yani süper Bilgiç, er olmak istiyorsanız n % 2 * 2 yerine << 1 yerine (n & 1) kullanabilirsiniz.

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ı.genellikleişlemi birkaç CPU döngüleri tıraş bile önemsiz ufak gelişmeler üzerine okunabilirlik değeri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • jocc talking shit

    jocc talking

    6 NİSAN 2007
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011