Dlaczego wielkość porcji jest często potęgą dwóch osób?

15

Istnieje wiele klonów Minecraft i pracuję nad własną implementacją. Zasadą renderowania terenu jest układanie całego świata w kawałki o stałej wielkości, aby zmniejszyć wysiłek związany ze zlokalizowanymi zmianami.

W Minecraft wielkość fragmentu wynosi 16 x 16 x 256, o ile teraz. A w klonach zawsze też widziałem wielkości kawałków o sile 2.

Czy jest jakiś powód, może związany z wydajnością lub pamięcią? Wiem, że potęgi 2 odgrywają szczególną rolę w komputerach binarnych, ale co to ma wspólnego z rozmiarem porcji?

danijar
źródło
1
Fajnie, że możesz dzielić go przez dwa i odzyskiwać parzyste liczby. (Nie jest to kompletna odpowiedź, ale coś przydatnego w używaniu liczb takich jak 2^n)
ashes999

Odpowiedzi:

27

Zależy to od gry i struktury indeksowania użytej dla fragmentów. Chociaż na tak wysokim poziomie nie jest zbyt prawdopodobne, aby miało to wiele wspólnego z pamięcią lub konkretnym ulepszeniem wydajności. Jest bardziej niż prawdopodobne, że jest to arbitralna decyzja o wielkości porcji w przewidywalny sposób. Pozwala na pewne sztuczki liczenia i indeksowania przy użyciu przesunięcia bitów, które nie byłyby możliwe w przypadku liczb, które nie są potęgą dwóch.

Na przykład policzenie potęg dwóch jest tak proste, jak przesunięcie bitowe:

Dec =  Bin
1   =  000001
2   =  000010
4   =  000100
8   =  001000
16  =  010000
32  =  100000

To, gdzie będą używane te skróty, będzie zależeć od programisty i tego, jaki problem próbują rozwiązać.

Jeśli podejmujesz decyzję o tym, jaki rozmiar zrobić, a nie ma to żadnego znaczenia, możesz również użyć czegoś, co jest znane i ma zalety, z których przywykłeś.

MichaelHouse
źródło
15

Po pierwsze, mnożenie przez potęgę dwóch jest znacznie tańsze niż mnożenie przez dowolną liczbę, ponieważ można to zrobić przez przesunięcie bitów . Przez większość czasu kompilator może to zrobić za Ciebie, więc za każdym razem, gdy piszesz „* 16” w swoim kodzie, kompilator faktycznie przesuwa się o cztery i nie musisz się tym martwić - wystarczy podać kompiluj okazję, projektując struktury danych w ten sposób.

Po drugie, ponieważ linie pamięci podręcznej, magistrale pamięci i inne autostrady informacyjne w twoim komputerze również mają tendencję do używania potęg dwóch, możesz w ten sposób uzyskać lepszą wydajność.

Po trzecie, my, starzy maniacy, jesteśmy przyzwyczajeni do zabawy z potęgami dwóch osób, więc jest to nawyk.

(Po czwarte, inni starzy maniacy, którzy projektują twój sprzęt i twoje kompilatory, również lubią potęgę dwóch, więc to się wkrótce nie zmieni).

Jari Komppa
źródło
2
+1 „Po trzecie, my, starzy maniacy, jesteśmy przyzwyczajeni do zabawy z potęgami dwóch osób, więc jest to nawyk”. To prawdopodobnie główny powód.
Laurent Couvidou,
9

Prawdziwa odpowiedź jest taka: na komputerze binarnym potęgi dwóch to ładne okrągłe liczby.

Kiedy normalna osoba musi wybrać dowolną liczbę w jakimś celu, zwykle wybiera ładne okrągłe liczby w systemie liczb, z którym jest im wygodnie, podstawa 10. Więc wybierze 10, 100, 1000 itd. Ponieważ są proste i łatwe i nie wymagają wiele przemyślenia, a dokładna wartość nie była dla nich naprawdę ważna, po prostu dążyli do ogólnej skali wielkości.

Jako programiści, kiedy musimy wybrać dowolną liczbę do jakiegoś celu, zazwyczaj wybieramy ładne okrągłe liczby w systemie numerycznym używanym przez komputery, podstawa 2. Wybieramy 2, 4, 8 itd. Ponieważ są proste i łatwe i nie wymagające wiele przemyślenia, a dokładna wartość nie była dla nas naprawdę ważna, po prostu dążyliśmy do ogólnej skali wielkości.

To naprawdę nie jest bardziej skomplikowane. To tylko ładne okrągłe liczby.

Trevor Powell
źródło
6

Jednym z powodów niewymienionych w innych odpowiedziach jest to, że w razie potrzeby moc dwóch liczb można zawsze zmniejszyć o połowę bez problemów z zaokrąglaniem. Prawdopodobnie nie jest to powód w klonach Minecraft, ale w niektórych innych przypadkach, takich jak tekstury z mipmapami .

sprzedać
źródło
2

Innym potencjalnym powodem może być zakodowanie informacji o każdym fragmencie w teksturze 3D. Jeśli twój docelowy sprzęt obsługiwał tekstury 3D, ale nie posiadał w pełni solidnej i ogólnej obsługi tekstur bez mocy dwóch ((przyznaję, że chcesz strzelać dość nisko), to zwiększenie mocy dwóch porcji nie jest po prostu idealny - jest niezbędny.

Maximus Minimus
źródło