গ্রেগ হিউগিল এবং IllidanS4 চমৎকার গাণিতিক ব্যাখ্যা সহ একটি লিঙ্ক দিয়েছেন। যারা বিশদে বেশি মাত্রায় যেতে চান না তাদের জন্য আমি এখানে এটি সংক্ষিপ্ত করার চেষ্টা করব।
যে কোনও গাণিতিক ক্রিয়াকলাপ, কিছু ব্যাতিক্রম, বহুপদী যোগ দ্বারা প্রতিনিধিত্ব করা যেতে পারে:
y = f(x)
একেবারে রূপান্তরিত হতে পারে :
y = a0 + a1*x + a2*(x^2) + a3*(x^3) + a4*(x^4) + ...
যেখানে a0, a1, a2, ... ধ্রুবক । সমস্যাটি হ'ল বর্গমূলের মতো অনেকগুলি ক্রিয়াকলাপের জন্য, সঠিক মূল্যের জন্য এই যোগফলটির অসীম সংখ্যা রয়েছে, এটি কোনও x ^ n এ শেষ হয় না । তবে, আমরা যদি কিছু x ^ n এ থামি এখনও কিছুটা নির্ভুলতার ফলাফল হতে পারে।
সুতরাং, যদি আমাদের থাকে:
y = 1/sqrt(x)
এই বিশেষ ক্ষেত্রে তারা গণনার গতির কারণে সম্ভবত দ্বিতীয় বহুর্ধ্ব সদস্যদের দ্বিতীয় থেকে উপরে ফেলে দেওয়ার সিদ্ধান্ত নিয়েছে:
y = a0 + a1*x + [...discarded...]
এবং টাস্কটি এখন নিচে নেমে এসেছে a0 এবং a1 গণনা করার জন্য y এর যথাযথ মান থেকে কমপক্ষে পার্থক্য রাখতে। তারা গণনা করেছেন যে সর্বাধিক উপযুক্ত মানগুলি:
a0 = 0x5f375a86
a1 = -0.5
সুতরাং আপনি যখন এটি সমীকরণ স্থাপন করেন আপনি পাবেন:
y = 0x5f375a86 - 0.5*x
আপনি কোডটিতে যে রেখাটি দেখছেন তা হ'ল:
i = 0x5f375a86 - (i >> 1);
সম্পাদনা: আসলে এখানে y = 0x5f375a86 - 0.5*x
যেমন হয় না তেমনi = 0x5f375a86 - (i >> 1);
পূর্ণরূপ হিসাবে স্থানটি যেহেতু কেবল দুটি দ্বারা বিভাজক হয় না বরং ঘনিষ্ঠকে দুটি দ্বারা ভাগ করে দেয় এবং কিছু অন্যান্য নিদর্শনগুলিকেও কারণ করে তোলে, তবে এটি এখনও কিছু সংখ্যক a0, a1, a2 গণনাতে নেমে আসে ...
এই মুহুর্তে তারা জানতে পেরেছেন যে এই ফলাফলের নির্ভুলতা এই উদ্দেশ্যে যথেষ্ট নয়। সুতরাং ফলাফলের যথার্থতা উন্নত করতে তারা নিউটনের পুনরাবৃত্তির কেবলমাত্র একটি পদক্ষেপ করেছে:
x = x * (1.5f - xhalf * x * x)
প্রয়োজনীয় নির্ভুলতা পূরণ না হওয়া পর্যন্ত তারা একটি লুপে আরও কিছু পুনরাবৃত্তি করতে পারত, প্রতিটি প্রত্যেকেই ফলশ্রুতি উন্নত করে। এটি ঠিক কীভাবে এটি সিপিইউ / এফপিইউতে কাজ করে! তবে মনে হয় কেবল একটি পুনরাবৃত্তিই যথেষ্ট ছিল, যা গতির জন্য আশীর্বাদও ছিল। সিপিইউ / এফপিইউ ভাসমান পয়েন্ট সংখ্যার নির্ভুলতায় পৌঁছানোর জন্য প্রয়োজনীয় যতগুলি পুনরাবৃত্তি করে ফলাফলটি সংরক্ষণ করা হয় এবং এতে আরও সাধারণ অ্যালগরিদম রয়েছে যা সমস্ত ক্ষেত্রে কাজ করে।
সুতরাং সংক্ষেপে, তারা যা করেছে তা হ'ল:
সিপিইউ / এফপিইউ হিসাবে প্রায় (প্রায়) একই অ্যালগরিদম ব্যবহার করুন, 1 / স্কয়ার্ট (এক্স) এর বিশেষ ক্ষেত্রে প্রাথমিক অবস্থার উন্নতি কাজে লাগান এবং সিপিইউ / এফপিইউ যথাযথভাবে যাওয়ার সমস্ত উপায় গণনা করবেন না তবে আগে থামবে, এইভাবে গণনা গতি অর্জন।