Parça boyutu neden genellikle iki güçtür?


15

Orada birçok Minecraft klonu var ve ben kendi uygulamam üzerinde çalışıyorum. Arazi oluşturma prensibi, tüm dünyayı yerelleştirilmiş değişikliklerin çabalarını azaltmak için sabit boyutlu parçalar halinde döşemektir.

Minecraft'ta yığın boyutu şu ana kadar 16 x 16 x 256. Ve klonlarda da her zaman 2 numara gücünün yığın boyutlarını gördüm.

Bunun performans veya bellekle ilgili bir nedeni var mı? İkili bilgisayarlarda iktidarın özel bir rol oynadığını biliyorum ama bunun yığın boyutuyla ne ilgisi var?


1
Onu ikiye bölmeye devam etmek ve çift sayıları geri almak güzel. (Tam bir cevap değil, ancak bir numarayı kullanma hakkında yararlı bir şey 2^n)
ashes999

Yanıtlar:


27

Bu oyuna ve parçalar için kullanılan indeksleme yapısına bağlı olacaktır. Yine de, bu kadar yüksek bir seviyede, bellek veya belirli bir performans geliştirme ile ilgisi çok fazla değildir. Büyük olasılıkla, parçaları tahmin edilebilir bir şekilde boyutlandırmak için keyfi bir karardır. İki güç olmayan sayılarla mümkün olmayan bit kaydırmayı kullanarak bazı sayma ve dizinleme numaralarına izin verir.

Örneğin, ikisinin güçlerinde saymak, ikili olarak biraz kaydırmak kadar kolaydır:

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

Bu kısayolların nerede kullanılacağı geliştiriciye ve hangi sorunu çözmeye çalıştıklarına bağlı olacaktır.

Hangi boyutta parça yapılacağına karar verirseniz ve bunun başka herhangi bir açıdan önemi yoksa, tanıdık ve kullanmaya alışkın olduğunuz bir şey de kullanabilirsiniz.


15

Birincisi, ikisinin güçleriyle çarpmak, rastgele bir sayıyla çarpmaktan çok daha ucuzdur, çünkü bunu biraz kaydırarak yapabilirsiniz . Çoğu zaman derleyici bunu sizin için yapabilir, bu nedenle kodunuza "* 16" yazdığınızda, derleyici aslında dörde kayma yapar ve bunun için endişelenmenize gerek yoktur; veri yapılarınızı bu şekilde tasarlayarak fırsatı derler.

İkincisi, bilgisayarınızdaki önbellek hatları, bellek veri yolları ve diğer bilgi otoyolları da ikisinin güçlerini kullanacak şekilde tasarlandığından, genel olarak bu şekilde daha iyi bir performans elde edebilirsiniz.

Üçüncüsü, biz yaşlı geekler iki kişilik güçlerle oynamaya alışkınız, bu yüzden bu bir alışkanlık.

(Dördüncüsü, donanımınızı ve derleyicilerinizi tasarlayan diğer yaşlı meraklılar da ikisinin güçlerini severler, bu yüzden bu yakında değişmeyecektir).


2
+1 "Üçüncüsü, biz yaşlı geekler iki kişilik güçlerle oynamaya alışkınız, bu yüzden bu bir alışkanlık." Muhtemelen ana nedeni budur.
Laurent Couvidou

9

Gerçek cevap sadece şudur: İkili bir bilgisayarda, ikisinin gücü güzel yuvarlak sayılardır.

Normal bir kişinin bir amaç için rasgele bir sayı seçmesi gerektiğinde, genellikle rahat oldukları sayı sistemindeki taban 10'u seçerler. Böylece, 10, 100, 1000 vb. Seçerler. basit ve kolay ve fazla düşünmeye gerek yok ve kesin değer onlar için gerçekten önemli değildi, sadece genel bir büyüklüğü hedefliyorlardı.

Programcılar olarak, bir amaç için rasgele bir sayı seçmemiz gerektiğinde, bilgisayarların kullandığı sayı sistemi, taban 2'de tipik olarak güzel yuvarlak sayılar seçeriz. Bu yüzden 2, 4, 8 vb. kolay ve fazla düşünmeye gerek yok ve kesin değer bizim için gerçekten önemli değildi, sadece genel büyüklükte bir hedefi hedefliyorduk.

Gerçekten bundan daha karmaşık değil. Onlar sadece yuvarlak numaralar.


6

Diğer cevaplarda belirtilmeyen bir neden, gerekirse iki sayının gücünün yuvarlama problemleri olmadan yarıya indirilebileceğidir. Bu muhtemelen Minecraft klonlarında bir neden değildir, ancak mipmap'lı dokular gibi bazı diğer durumlarda da olabilir .


2

Bir başka potansiyel neden, her bir yığın hakkındaki bilgileri bir 3D dokuda kodlamanıza izin vermesidir. Hedef donanımınız 3D dokuları destekliyorsa, ancak tamamen sağlam ve genel iki güç olmayan doku desteğine sahip değilse (ki bunun için oldukça düşük çekim yapmak istediğinizi itiraf ediyorum), o zaman iki büyüklüğünüzü güçlendirmek değil sadece ideal - bu çok önemli.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.