Чому розмір шматка часто має потужність два?


15

Там багато клонів Minecraft, і я працюю над власною реалізацією. Принцип рельєфу рельєфу полягає в тому, щоб укласти весь світ в шматки фіксованого розміру, щоб зменшити зусилля локалізованих змін.

У Minecraft розмір шматка становить 16 х 16 х 256, наскільки я зараз. І в клонах я також завжди бачив куски розмірів потужності числа 2.

Чи є якась причина для цього, можливо, пов’язана з продуктивністю чи пам’яттю? Я знаю, що сили 2 грають особливу роль у двійкових комп'ютерах, але що це стосується розміру шматка?


1
Приємно, що ви можете продовжувати ділити його на два і отримувати парні числа назад. (Не повна відповідь, але щось корисне щодо використання числа на кшталт 2^n)
ashes999

Відповіді:


27

Це залежало б від гри та структури індексації, що використовується для шматів. Хоча на такому високому рівні це не надто ймовірно, що це має багато спільного з пам'яттю або конкретним підвищенням продуктивності. Більш ніж ймовірно, це довільне рішення щодо розміщення шматочків передбачуваним способом. Це дозволяє виконувати деякі підрахунки та індексації, використовуючи зміщення бітів, що було б неможливо з числами, які не мають потужності два.

Наприклад, підрахунок у двох потужностях настільки ж простий, як і переміщення біта у двійкові:

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

Де будуть використовуватися ці ярлики, буде залежати від розробника та проблеми, яку вони намагаються вирішити.

Якщо ви приймаєте рішення, якого розміру робити шматки, і це не має значення в будь-яких інших аспектах, ви можете також використовувати щось знайоме і має переваги, якими ви звикли користуватися.


15

По-перше, множення на дві потужності набагато дешевше, ніж множення на довільне число, оскільки ви можете це зробити шляхом переміщення бітів . Більшу частину часу компілятор може робити це за вас, тому щоразу, коли ви пишете "* 16" у своєму коді, компілятор насправді робить зсув на чотири, і вам не потрібно про це турбуватися - вам просто потрібно дати компілятор можливості, розробивши свої структури даних таким чином.

По-друге, оскільки лінії кеш-пам'яті, шини пам'яті та інші інформаційні дороги на вашому комп'ютері також, як правило, розроблені для використання потужностей двох, ви, таким чином, можете отримати кращу ефективність.

По-третє, ми, старі гіки, просто звикли грати з двома силами, тому це звичка.

(По-четверте, інші старі гіки, які розробляють ваше обладнання та ваші компілятори, також люблять потужність двох, тому це не скоро зміниться).


2
+1 "По-третє, ми, старі гіки, просто звикли грати з двома силами, тому це звичка". Це, мабуть, головна причина.
Лоран Кувіду

9

Справжня відповідь якраз така: На двійковому комп’ютері потужність двох є хорошими круглими числами.

Коли звичайній людині потрібно вибрати довільне число з якоюсь метою, вони зазвичай вибирають хороші круглі цифри в системі числення, з якою вони зручні, базу 10. Отже, вони виберуть 10, 100, 1000 тощо. Тому що вони простий і легкий і не вимагає багато роздумів, а точне значення для них не було дуже важливим, вони просто прагнули до загальної шкали.

Як програмісти, коли нам потрібно вибрати довільне число з якоюсь метою, ми зазвичай вибираємо хороші круглі числа в системі числення, яку використовують комп'ютери, база 2. Отже, ми виберемо 2, 4, 8 і т. Д. Тому що вони прості і легко і не вимагає багато роздумів, а точне значення насправді не було для нас важливим, ми лише прагнули до загальної шкали.

Це насправді не складніше за це. Вони просто хороші круглі цифри.


6

Однією з причин, яка не згадується в інших відповідях, є те, що при необхідності потужності двох чисел завжди можна зменшити вдвічі без проблем округлення. Це, мабуть, не є причиною для клонів Minecraft, але є в деяких інших випадках, наприклад, у текстурах з mipmaps .


2

Ще однією можливою причиною було б те, що воно дозволило б кодувати інформацію про кожен фрагмент у 3D-текстурі. Якщо ваша цільова апаратура підтримує тривимірні текстури, але не має повністю надійної та загальної підтримки текстури без потужності (яка, на вашу думку, ви хочете зробити зйомки досить низькою), то створення ваших розмірів розміру двох не є просто ідеал - це суттєво.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.