ทำไมขนาดก้อนมักจะเป็นกำลังของสอง


15

มีโคลนนิ่ง Minecraft จำนวนมากอยู่ที่นั่นและฉันกำลังดำเนินการตามแนวทางของฉันเอง หลักการของการเรนเดอร์ภูมิประเทศคือการปูกระเบื้องให้ทั่วทั้งโลกเป็นชิ้นขนาดคงที่เพื่อลดความพยายามในการเปลี่ยนแปลงในภาษาท้องถิ่น

ใน Minecraft ขนาดก้อนเท่ากับ 16 x 16 x 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 "ประการที่สามเรามีความคุ้นเคยกับการเล่นโดยใช้พลังของสองคนดังนั้นมันจึงเป็นนิสัย" นี่อาจเป็นเหตุผลหลัก
Laurent Couvidou

9

คำตอบที่แท้จริงคือสิ่งนี้: บนคอมพิวเตอร์แบบไบนารี่, พลังของทั้งสองเป็นจำนวนรอบที่ดี

เมื่อบุคคลทั่วไปต้องการเลือกหมายเลขโดยพลการเพื่อวัตถุประสงค์บางอย่างพวกเขามักจะเลือกตัวเลขกลมที่ดีในระบบตัวเลขที่พวกเขาพอใจกับฐาน 10 ดังนั้นพวกเขาจะเลือก 10, 100, 1,000 ฯลฯ เพราะพวกเขา เรียบง่ายและไม่ต้องการความคิดมากและคุณค่าที่แม่นยำนั้นไม่สำคัญสำหรับพวกเขาพวกเขาแค่เล็งไปที่ขนาดทั่วไป

ในฐานะโปรแกรมเมอร์เมื่อเราจำเป็นต้องเลือกเลขที่โดยพลการเพื่อวัตถุประสงค์บางอย่างเรามักจะเลือกตัวเลขกลมที่ดีในการใช้คอมพิวเตอร์ระบบฐานฐาน 2 ดังนั้นเราจะเลือก 2, 4, 8 และอื่น ๆ เพราะมันง่ายและ ง่ายและไม่ต้องใช้ความคิดมากและค่าที่แม่นยำนั้นไม่สำคัญสำหรับเราจริงๆเราแค่เล็งไปที่ขนาดทั่วไป

มันไม่ซับซ้อนกว่านั้นจริงๆ พวกมันแค่ตัวเลขกลมที่ดี


6

เหตุผลหนึ่งที่ไม่ได้กล่าวถึงในคำตอบอื่น ๆ คือถ้าจำเป็นพลังของตัวเลขสองตัวสามารถลดลงครึ่งหนึ่งได้ตลอดเวลาโดยไม่มีปัญหาการปัดเศษ นี่อาจจะไม่ใช่เหตุผลในโคลน Minecraft แต่เป็นในกรณีอื่น ๆ บางอย่างเช่นในพื้นผิวที่มีmipmaps


2

อีกสาเหตุที่เป็นไปได้คือมันจะช่วยให้คุณเข้ารหัสข้อมูลเกี่ยวกับแต่ละอันในพื้นผิว 3 มิติ หากฮาร์ดแวร์เป้าหมายของคุณรองรับพื้นผิว 3 มิติ แต่ไม่มีการรองรับพื้นผิวที่สมบูรณ์และทั่วไปที่ไม่ใช่พลังแห่งสอง (ซึ่งฉันยอมรับว่าคุณต้องการถ่ายภาพที่ค่อนข้างต่ำสำหรับ) จากนั้นการทำให้ขนาดอันทรงพลังของสองไม่ใช่ เหมาะอย่างยิ่ง - มันสำคัญ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.