আমি বাছাই করা_সামগ্রীগুলির উত্সটির দিকে চেয়ে ছিলাম এবং এই লাইনটি দেখে অবাক হয়েছি :
self._load, self._twice, self._half = load, load * 2, load >> 1
এখানে loadএকটি পূর্ণসংখ্যা কেন এক জায়গায় বিট শিফট এবং অন্য জায়গায় গুণ? এটি যুক্তিসঙ্গত বলে মনে হচ্ছে যে বিট স্থানান্তরটি 2 দ্বারা অবিচ্ছেদ্য বিভাগের চেয়ে দ্রুততর হতে পারে, তবে কেন একটি শিফ্ট দ্বারা গুণনটি প্রতিস্থাপন করবেন না? আমি নিম্নলিখিত বিষয়গুলিকে বেঞ্চমার্ক করেছি:
- (বার, ভাগ)
- (শিফট, শিফট)
- (বার, শিফট)
- (শিফট, বিভাজন)
এবং দেখা গেছে যে # 3 অন্যান্য বিকল্পের তুলনায় ধারাবাহিকভাবে দ্রুত:
# self._load, self._twice, self._half = load, load * 2, load >> 1
import random
import timeit
import pandas as pd
x = random.randint(10 ** 3, 10 ** 6)
def test_naive():
a, b, c = x, 2 * x, x // 2
def test_shift():
a, b, c = x, x << 1, x >> 1
def test_mixed():
a, b, c = x, x * 2, x >> 1
def test_mixed_swapped():
a, b, c = x, x << 1, x // 2
def observe(k):
print(k)
return {
'naive': timeit.timeit(test_naive),
'shift': timeit.timeit(test_shift),
'mixed': timeit.timeit(test_mixed),
'mixed_swapped': timeit.timeit(test_mixed_swapped),
}
def get_observations():
return pd.DataFrame([observe(k) for k in range(100)])
প্রশ্নটি:
আমার পরীক্ষা কি বৈধ? যদি তা হয় তবে (শিফট, শিফট) তুলনায় কেন (গুন, শিফট) দ্রুত?
আমি উবুন্টু 14.04 এ পাইথন 3.5 চালাচ্ছি।
সম্পাদন করা
উপরে প্রশ্নের মূল বক্তব্য রয়েছে। ড্যান গেটেজ তার উত্তরে একটি দুর্দান্ত ব্যাখ্যা সরবরাহ করে।
সম্পূর্ণতার স্বার্থে, xগুণনের অপ্টিমাইজেশন প্রয়োগ না করা হলে বৃহত্তর জন্য নমুনার চিত্রগুলি এখানে দেওয়া হয় ।
xখুব বড় হয়, কারণ এটি ঠিক কীভাবে এটি মেমরির মধ্যে সংরক্ষণ করা হয় একটি প্রশ্ন, তাই না?




x?