Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przesunięcie w prawo

Ostatnio zmodyfikowano 2017-04-08 23:39
Autor Wiadomość
kaktus12121
Temat założony przez niniejszego użytkownika
Przesunięcie w prawo
» 2017-04-08 22:30:28
Witam
Mam zadanie:
uzupełnij funkcję int divide(int value, int exponent) aby zwracała wartość przekazaną przez parametr value podzieloną przez dwa do potęgi o wykładniku przekazanym przez parametr exponent. Do operacji dzielenia wykorzystaj operator przesunięcia w prawo >>.

Oto mój program:
C/C++
int divide( int value, int exponent )
{
   
    int wynik = 1;
    for( int x = 1; x < exponent; x++ )
    {
        wynik *= 2;
       
    }
   
    return value >> wynik;
}
A oto wyniki kompilacji:

PASS  divide( 2, 1 ) { return 1; }
PASS  divide( 4, 2 ) { return 1; }
FAILED  divide( 2048, 8 ) { return 2048; }
FAILED  divide( 1024, 3 ) { return 64; }
PASS  divide( 666, 2 ) { return 166; }
PASS  divide( 19, 1 ) { return 9; }
FAILED  divide( 29, 4 ) { return 0; }
FAILED  divide( 19312367, 6 ) { return 19312367; }
PASS  divide( 0, 1 ) { return 0; }
PASS  divide( -5, 2 ) { return -2; }
FAILED  divide( -1024, 4 ) { return -4; }
FAILED  divide( -819500, 3 ) { return -51219; }

Pierwszy nawias divide to są dane, a następny nawias to jest to co wyszło po kompilacji. PASS znaczy dobrze, FAILED źle.

Program dobrze liczy potęgę, tylko niektóre liczby źle dzielą się poprzez przesunięcie.
Nie mam pomysłu. Analizowałem program sprawdzając zawartość zmiennych w każdym etapie i doszedłem do wniosku, że problem leży w przesunięciu
P-160001
pekfos
» 2017-04-08 23:39:03
value >> exponent.
P-160006
« 1 »
  Strona 1 z 1