Prikaz jedne poruke
Stara 5.3.2008, 19:40   #3
bvitnik
Starosedelac
 
Član od: 27.12.2005.
Lokacija: Pančevo
Poruke: 1.305
Zahvalnice: 66
Zahvaljeno 438 puta na 328 poruka
Određen forumom Re: Dobijanje broja koji je stepen od 2

Ako vraća najbliži stepen dvojke (znači ako je number == 17, vraća 16) onda ide ovako:

Kod:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

unsigned int get_power_of_two(unsigned int number);

int main(int argc, char *argv[])
{
  unsigned int broj;
  
  scanf("%d", &broj);
  printf("%d\n", get_power_of_two(broj));
  
  system("PAUSE");	
  return 0;
}

unsigned int get_power_of_two(unsigned int number)
{
    int i;
    unsigned int temp1 = number, temp2;

    for(i = 0; temp1 > 0; i++)
        temp1 >>= 1;                          //delimo s 2 ;)
        
    temp1 = pow(2, i-1);                      //manji stepen
    temp2 = pow(2, i);                        //veci stepen

    if((temp2 - number) < (number - temp1))   //ako je blize vecem stepenu dvojke
        return temp2;                         //vrati veci stepen
    else
        return temp1;                         //vrati manji stepen
}
Ako vraća prvi veći stepen dvojke (onako kako si ti opisao), onda ide ovako (test program je isti):

Kod:
unsigned int get_power_of_two(unsigned int number)
{
    int i;
    
    for(i = 0; number > 0; i++)
        number >>= 1;                         //delimo s 2 ;)
       
    return pow(2, i);
}
edit:

Je l' dovoljno kratak ?... i onda se ljudi čude kako su današnje igre tako loše optimizovane. Daleko ste vi od OpenGL-a, ima još mnogo matematike da ljuštite . Ne da je matematika važna za programiranje nego programiranje jeste matematika jer su algoritmi i funkcije u stvari matematički koncepti... i sve vam to kaže čovek koji ima 6. iz matematike 2 .

Poslednja ispravka: bvitnik (5.3.2008 u 20:19)
bvitnik je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku bvitnik na korisnoj poruci:
Stevvan (5.3.2008)