PS. do tematu "Przeczytany, zamknięty Czy da się bez użycia warunków if"
Ostatnio zmodyfikowano 2011-01-01 14:42
F90M |
» 2010-12-28 01:13:39 Błąd wziął się z tego, że źle przepisałem z tematu głównego |
Taa, nadal wychodzą złe wyniki, poza tym nie wiem co uczepiłeś się tak tego odejmowania 3 od zmiennej a. a1 = a2 - 3 Jaki to ma sens w tym programie? Szczególnie biorąc pod uwagę szybkość działania na którą tak bardzo się tutaj uwziąłeś. b =( a >> 1 ) - 1; c = b +( a & 1 ) - 1;
Wystarczająco szybkie? Co z tego skoro po włączeniu optymalizacji nie zauważę różnicy w porównaniu do tego: b =( a - a % 2 ) / 2 - 1; c =( a + a % 2 ) / 2 - 2;
czy tego: b = a / 2 - 1; c = b + a % 2 - 1;
|
|
jsc Temat założony przez niniejszego użytkownika |
» 2010-12-28 02:18:46 Jak to zrobiłem to zjechało mi połowę czasu. |
|
jsc Temat założony przez niniejszego użytkownika |
» 2010-12-28 02:28:14 A to: b = a << 2 - 1; c = b + a % 2 - 1;
Zeszło do 8 sekund. |
|
F90M |
» 2010-12-28 03:35:42 Możesz z łaski swojej, chociaż raz napisać kod dający poprawny wynik, zanim pochwalisz się szybkością jego wykonywania? |
|
pekfos |
» 2010-12-28 10:56:02 operator << i >> ma chyba najniższy priorytet operatorów. najpierw dodawanie, potem przesunięcia |
|
jsc Temat założony przez niniejszego użytkownika |
» 2010-12-28 11:03:58 Może pokażesz błąd w moim rozumowaniu?
Policzmy:
int a = 5 //a = 5 a =- 3 //a=2 b = floor (a/2) // (2/2) = 1, czyli b=1 c = b + ((a%2) == 1) /* 2%2 = 0 0 == 1 daje 0, więc 1 + 0 = 1 c=1 */
int a = 6 //a=6 a =- 3 //a=3 b = floor (a/2) // (3/2) = 1,5, floor (1,5) = 1, czyli b=1 c = b + ((a%1) == 1) /* 2%2 = 1 1 == 1 daje 1, więc 1 + 1 = 2 c=1 */ |
|
pekfos |
» 2010-12-28 11:41:22 a = - 3 przypisuje wartość -3. już sam początek jest zły |
|
ison |
» 2010-12-28 11:42:07 Może pokażesz błąd w moim rozumowaniu?
|
jak a=2? a = -3 to podstawienie pod a liczby -3 a nie odjęcie od niej 3 ...jak wyżej... a%1? raczej nie ;p wyszło ci 2 to dlaczego zatem c=1? |
|
1 2 3 « 4 » 5 6 7 8 |