দূরত্বের কার্যটি কীভাবে অনুকূল করা যায়?


23

যুক্তিসঙ্গতভাবে সহজ আরটিএস-এর মতো গেমটি বিকাশ করার সময় আমি লক্ষ্য করেছি যে আমার দূরত্বের গণনাগুলি পারফরম্যান্সে প্রভাব ফেলছে।

সর্বদা, দূরত্ব যাচাই করা থাকে যে কোনও ইউনিট তার লক্ষ্যমাত্রার সীমার মধ্যে রয়েছে কিনা, প্রক্ষেপণ তার লক্ষ্যে পৌঁছেছে কিনা, খেলোয়াড় যদি কোনও পিকআপ, সাধারণ সংঘর্ষ ইত্যাদির উপর দিয়ে চলেছে তবে তালিকাটি চলছে এবং অনুসন্ধানের জন্য দুটি পয়েন্টের মধ্যে দূরত্ব অনেক ব্যবহৃত হয়।

আমার প্রশ্নটি ঠিক সে সম্পর্কে। আমি জানতে চাই যে গেম ডেভেলপারদের দূরত্ব যাচাইয়ের জন্য সাধারণ স্কয়ার্ট (এক্স * এক্স + ওয়াই * ওয়াই) পদ্ধতির ব্যতীত অন্য কী কী বিকল্প রয়েছে, যা আমরা যদি ফ্রেম প্রতি কয়েক হাজার বার সম্পাদন করি তবে এটি যথেষ্ট সময়সাপেক্ষ।

আমি উল্লেখ করতে চাই যে আমি ম্যানহাটনের দূরত্ব এবং স্কোয়ার দূরত্বের তুলনা সম্পর্কে সচেতন (স্কয়ার্টের বাধাটি এড়িয়ে)। আর কিছু?



উদাহরণস্বরূপ, আপনার যদি এমন কোনও বস্তু রয়েছে যা আপনি সরানোর প্রত্যাশা করেন না যেমন উদাহরণস্বরূপ, দূরত্ব ফাংশনটির 2D টেলর সিরিজ নেওয়া, বর্গাকারে এটি কেটে ফেলা এবং তারপরে ফলস্বরূপ ফাংশনটি সংরক্ষণ করা ভাল it নির্দিষ্ট বিল্ডিং থেকে দূরত্ব ফাংশন। এটি কিছু ক্ষুধা কাজটি শুরুতে স্থানান্তরিত করবে এবং কিছুটা গতি বাড়িয়ে দিতে পারে।
আলেকজান্ডার গ্রুবার

উত্তর:


26

টি এল; ডিআর; আপনার সমস্যা দূরত্ব ফাংশন সম্পাদন করে না। আপনার সমস্যা দূরত্বের কার্যটি এতবার সম্পাদন করছে। অন্য কথায় আপনার গাণিতিকের চেয়ে একটি অ্যালগরিদমিক অপ্টিমাইজেশন প্রয়োজন।

[সম্পাদনা] আমি আমার উত্তরের প্রথম বিভাগটি মুছে ফেলছি, কারণ লোকেরা এটি ঘৃণা করছে। প্রশ্নের শিরোনাম সম্পাদনার আগে বিকল্প দূরত্ব ফাংশন জিজ্ঞাসা করেছিল।

আপনি একটি দূরত্ব ফাংশন ব্যবহার করছেন যেখানে আপনি প্রতিবার বর্গমূলের গণনা করছেন। তবুও, আপনি স্কোয়ার রুটটি একেবারেই ব্যবহার না করেই কেবল এটি প্রতিস্থাপন করতে পারেন এবং পরিবর্তে স্কোয়ারের দূরত্ব গণনা করতে পারেন। এটি আপনাকে অনেক মূল্যবান চক্র সাশ্রয় দেবে।

দূরত্ব ^ 2 = x * x + y * y;

এটি আসলে একটি সাধারণ কৌশল। তবে আপনার সেই অনুযায়ী আপনার গণনাগুলি সামঞ্জস্য করতে হবে। প্রকৃত দূরত্ব গণনার আগে এটি প্রাথমিক চেক হিসাবেও ব্যবহার করা যেতে পারে। সুতরাং উদাহরণস্বরূপ ছেদ পরীক্ষার জন্য দুটি পয়েন্ট / গোলকের মধ্যে প্রকৃত দূরত্ব গণনা করার পরিবর্তে আমরা তার পরিবর্তে দূরত্ব স্কোয়ার গণনা করতে পারি এবং ব্যাসার্ধের পরিবর্তে ব্যাসার্ধ স্কোয়ারের সাথে তুলনা করতে পারি।

@ বাইট 56 এর পরে ভাল করে সম্পাদনা করুন, আমি প্রশ্নটি পড়িনি এবং আপনি স্কোয়ার দূরত্বের অপ্টিমাইজেশান সম্পর্কে সচেতন ছিলেন তা উল্লেখ করে।

আপনার ক্ষেত্রে, দুর্ভাগ্যক্রমে আমরা কম্পিউটার গ্রাফিকগুলিতে প্রায় একচেটিয়াভাবে ইউক্যালিডিয়ান স্পেস নিয়ে কাজ করি এবং দূরত্বকে Sqrt of Vector dot itselfইউক্যালিডিয়ান স্পেসের মতোই সংজ্ঞায়িত করা হয়।

দূরত্ব স্কোয়ারটি হ'ল সেরা আনুমানিকতা যা আপনি পেতে চলেছেন (পারফরম্যান্সের দিক দিয়ে), আমি 2 গুণ, একটি সংযোজন এবং একটি কার্যনির্বাহী কিছু মারতে দেখছি না।

সুতরাং আপনি বলছেন আমি দূরত্বের ক্রিয়াকে অপ্টিমাইজ করতে পারি না আমার কী করা উচিত?

আপনার সমস্যা দূরত্ব ফাংশন সম্পাদন করে না। আপনার সমস্যা দূরত্বের কার্যটি এতবার সম্পাদন করছে। অন্য কথায় আপনার গাণিতিকের চেয়ে একটি অ্যালগরিদমিক অপ্টিমাইজেশন প্রয়োজন।

বিষয়টি হ'ল দৃশ্যের প্রতিটি বস্তুর সাথে প্লেয়ার ছেদটি পরীক্ষা করার পরিবর্তে প্রতিটি ফ্রেম। আপনি সহজেই আপনার সুবিধার জন্য স্থানিক সংহতি ব্যবহার করতে পারেন এবং কেবল প্লেয়ারের নিকটে থাকা বস্তুগুলি পরীক্ষা করুন (যেগুলি সম্ভবত আঘাত / ছেদ করার সম্ভাবনা বেশি)।

প্রকৃতপক্ষে একটি স্থানিক পার্টিশনের ডেটা কাঠামোয় those স্থানিক তথ্য সংরক্ষণ করে এটি সহজেই করা যায় । একটি সাধারণ গেমের জন্য আমি একটি গ্রিডের পরামর্শ দেব কারণ এটি মূলত কার্যকর করা সহজ এবং গতিশীল দৃশ্যের সাথে দুর্দান্তভাবে ফিট করে।

প্রতিটি ঘর / বাক্সে গ্রিডের বাউন্ডিং বক্সটি বন্ধ করে দেওয়া অবজেক্টের একটি তালিকা থাকে। এবং এই ঘরগুলিতে প্লেয়ারের অবস্থানটি ট্র্যাক করা সহজ। এবং দূরত্বের গণনার জন্য, আপনি কেবলমাত্র দৃশ্যের সমস্ত পরিবর্তে একই বা প্রতিবেশী কক্ষের অভ্যন্তরে objects অবজেক্টগুলির সাথে প্লেয়ারের দূরত্ব পরীক্ষা করে দেখুন।

আরও জটিল পদ্ধতিটি হল বিএসপি বা অক্ট্রি ব্যবহার করা।


2
আমি বিশ্বাস করি যে প্রশ্নের শেষ বাক্যটি বলে যে ওপি অন্যান্য বিকল্পের সন্ধান করছে (তারা স্কোয়ার দূরত্ব ব্যবহারের বিষয়ে জানে)।
MichaelHouse

@ বাইট ৫6 হ্যাঁ আপনি সঠিক, আমি এটি পড়িনি।
ধারণাগার 3

যাইহোক উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ। আপনি কি একটি বাক্য যুক্ত করে নিশ্চিত করবেন যে এই পদ্ধতিটি আমাদের ইউক্যালিডিয়ান দূরত্ব দেয় না, তবে এটি তুলনা করে খুব সঠিক? আমি মনে করি এটি কোনও অনুসন্ধান ইঞ্জিন থেকে এখানে আসার সাথে কিছু যুক্ত করবে।
গ্রিমাশা

@ গ্রিমশো আমি মূল সমস্যাটি সমাধান করার জন্য উত্তর সম্পাদনা করেছি।
ধারণায় 3

@ বাইট ৫5 দেখানোর জন্য ধন্যবাদ। আমি উত্তর সম্পাদনা করেছি।
ধারণাগুলি

29

আপনার যদি এমন কোনও কিছু প্রয়োজন হয় যা কোনও দূরত্বে রৈখিক থেকে যায় (বিপরীত distance^2) এবং তবুও অস্পষ্টভাবে বিজ্ঞপ্তি প্রদর্শিত হয় (স্কোয়ারিশ চেবিশেভ এবং হীরকের মতো ম্যানহাটনের দূরত্বের বিপরীতে), আপনি অষ্টভুজ আকারের দূরত্বের আনুমানিকতা পেতে পরবর্তী দুটি কৌশল গড়ে তুলতে পারেন:

dx = abs(x1 - x0)
dy = abs(y1 - y0)

dist = 0.5 * (dx + dy + max(dx, dy))

ওল্ফ্রাম আলফাকে ধন্যবাদ এখানে ফাংশনটির একটি ভিজ্যুয়ালাইজেশন (কনট্যুর প্লট) দেওয়া হল :

কনট্যুর প্লট

এবং ইউক্লিডিয়ান দূরত্বের সাথে তুলনা করার সময় এটির ত্রুটি কার্যকারিতার একটি প্লট রয়েছে (রেডিয়ানস, প্রথম চতুর্থাংশ কেবল)

ত্রুটি প্লট

আপনি দেখতে পাচ্ছেন, ত্রুটির অক্ষটি 0% থেকে লবগুলিতে প্রায় 12% পর্যন্ত হয় to সহগকে কিছুটা সংশোধন করে আমরা এটিকে +/- 4% এ নামিয়ে আনতে পারি:

dist = 0.4 * (dx + dy) + 0.56 * max(dx, dy)

এখানে চিত্র বর্ণনা লিখুন

হালনাগাদ

উপরের সহগগুলি ব্যবহার করে সর্বাধিক ত্রুটিটি +/- 4% এর মধ্যে থাকবে তবে গড় ত্রুটি এখনও + 1.3% থাকবে। শূন্য গড় ত্রুটির জন্য অনুকূলিত করা, আপনি এটি ব্যবহার করতে পারেন:

dist = 0.394 * (dx + dy) + 0.554 * max(dx, dy)

যা -5% এবং + 3% এর মধ্যে ত্রুটি দেয় এবং গড় ত্রুটি + 0.043% দেয়


এই অ্যালগরিদমের জন্য কোনও নামের জন্য ওয়েব অনুসন্ধান করার সময়, আমি এই অনুরূপ অষ্টভুজাকার অনুমানটি পেয়েছি :

dist = 1007/1024 * max(dx, dy) + 441/1024 * min(dx, dy)

নোট করুন যে এটি মূলত সমতুল্য (যদিও উদ্দীপকগুলি পৃথক - এইগুলি একটি -1.5% থেকে 7.5% ত্রুটি দেয় তবে এটি +/- 4% তে ম্যাসেজ করা যেতে পারে) কারণ max(dx, dy) + min(dx, dy) == dx + dy। এই ফর্মটি ব্যবহার করে, minএবং maxকলগুলি পক্ষে যেতে পারে:

if (dy > dx)
    swap(dx, dy)

dist = 1007/1024 * dx + 441/1024 * dy

এটি কি আমার সংস্করণের চেয়ে দ্রুত হতে চলেছে? কে জানে ... সংকলক এবং কীভাবে এটি লক্ষ্য প্ল্যাটফর্মের জন্য প্রতিটিকে অনুকূল করে on আমার অনুমান যে কোনও পার্থক্য দেখা বেশ কঠিন হবে।


3
মজাদার, এর আগে আর দেখেনি! এর কোনও নাম আছে, বা কেবল "চেবিশেভ এবং ম্যানহাটনের গড়"?
কংগ্রেসবঙ্গাস

@ কনগাসবঙ্গাস এটির সম্ভবত একটি নাম রয়েছে তবে আমি কী তা জানি না। যদি তা না হয় তবে সম্ভবত একদিন এটিকে ক্রিস্ট দূরত্ব (হাহ ... সম্ভবত না) বলা হবে
খ্রিস্ট

1
নোট করুন যে ভাসমান-পয়েন্টের গুণগুলি খুব কার্যকর নয়। এজন্য অন্যান্য আনুমানিক 1007/1024 ব্যবহার করে (যা বিট শিফট দ্বারা পূর্ণসংখ্যার গুণ হিসাবে প্রয়োগ করা হবে)।
এমসাল্টাররা 24'14

@ এসএমএলটার হ্যাঁ, ভাসমান পয়েন্ট অপারেশনগুলি প্রায়শই সংখ্যার অপারেশনগুলির চেয়ে ধীর হয় তবে এটি অপ্রাসঙ্গিক - 0.4 এবং 0.56 কেবল সহজেই পূর্ণসংখ্যার অপারেশনগুলি ব্যবহার করতে রূপান্তরিত হতে পারে। তদ্ব্যতীত, আধুনিক x86 হার্ডওয়্যারে, সবচেয়ে ফ্লোটিং পয়েন্ট অপারেশন (ব্যতীত অন্য FDIV, FSQRTএবং অন্যান্য তুরীয় ফাংশন) খরচ মূলত একই তাদের পূর্ণসংখ্যা সংস্করণ হিসাবে: নির্দেশ প্রতি 1 বা 2 চক্র।
খ্রিস্ট

1
এটি খুবই আলফা সর্বোচ্চ + + বিটা ন্যূনতম অনুরূপ: en.wikipedia.org/wiki/Alpha_max_plus_beta_min_algorithm
drake7707

21

কখনও কখনও এই প্রশ্নটি দূরত্ব গণনা সম্পাদনের ব্যয়ের কারণে নয়, তবে গণনা করা হচ্ছে বলে সংখ্যার কারণে।

অনেক অভিনেতা নিয়ে একটি বৃহত গেমের জগতে , একজন অভিনেতা এবং অন্য সমস্ত ব্যক্তির মধ্যে দূরত্ব পরীক্ষা করা অবান্তর । আরও খেলোয়াড়, এনপিসি এবং প্রজেক্টিলগুলি বিশ্বে প্রবেশ করার সাথে সাথে তুলনা করার যে সংখ্যাটি তৈরি করা দরকার তার সাথে চতুর্ভুজ বৃদ্ধি পাবে ।O(N^2)

সেই বৃদ্ধিকে হ্রাস করার একটি উপায় হ'ল অনাকাঙ্ক্ষিত অভিনেতাদের দ্রুত গণনা থেকে বাদ দেওয়ার জন্য একটি ভাল ডেটা স্ট্রাকচার ব্যবহার করা।

আমরা সীমিত হতে পারে এমন সমস্ত অভিনেতাকে দক্ষতার সাথে পুনরাবৃত্তি করার একটি উপায় সন্ধান করছি , যদিও বেশিরভাগ অভিনেতা যা অবশ্যই স্পষ্টভাবে সীমার বাইরে রয়েছে

যদি আপনার অভিনেতাগুলি মোটামুটি সমানভাবে বিশ্বজুড়ে ছড়িয়ে থাকে তবে বালতির একটি গ্রিড উপযুক্ত কাঠামো হওয়া উচিত (যেমন গ্রহণিত উত্তর হিসাবে বোঝা যায়)। মোটামুটি গ্রিডে অভিনেতাদের রেফারেন্স রেখে, আপনাকে বাকি সমস্ত কিছু অভিনেতাদের কাস্ট করতে পার্শ্ববর্তী কয়েকটি বালতি পরীক্ষা করতে হবে যা বাকি অংশগুলি উপেক্ষা করতে পারে range যখন কোনও অভিনেতা চলে যান, আপনার তাকে তার পুরানো বালতি থেকে নতুন একটিতে স্থানান্তর করতে হবে।

অভিনেতাদের জন্য যা কম সমানভাবে চতুর্দিকে ছড়িয়ে থাকে দ্বি-মাত্রিক বিশ্বের জন্য আরও ভাল করতে পারে বা অষ্ট্রি ত্রি-মাত্রিক বিশ্বের জন্য উপযুক্ত। এগুলি আরও সাধারণ উদ্দেশ্যে কাঠামো যা দক্ষতার সাথে খালি জায়গার বৃহত অঞ্চল এবং প্রচুর অভিনেতাযুক্ত ছোট অঞ্চলগুলিকে দক্ষতার সাথে ভাগ করতে পারে। জন্য স্ট্যাটিক অভিনেতা আছে বাইনারি স্থান পার্টিশন (বিএসপি), যা অনুসন্ধান কিন্তু পর্যন্ত খুব রিয়েলটাইমে আপডেটে ব্যয়বহুল খুব দ্রুত। বিএসপিগুলি বারবার এটি অর্ধেক কাটতে প্লেন ব্যবহার করে স্থান পৃথক করে এবং যে কোনও মাত্রায় প্রয়োগ করা যেতে পারে।

অবশ্যই আপনার অভিনেতাদের এমন একটি কাঠামো রাখার জন্য ওভারহেড রয়েছে, বিশেষত যখন তারা পার্টিশনের মধ্যে চলছে। তবে অনেক অভিনেতা কিন্তু আগ্রহের ছোট পরিসীমা নিয়ে একটি বিশাল বিশ্বে, সমস্ত বস্তুর তুলনায় নিখুঁত তুলনায় ব্যয়গুলি খুব কম হওয়া উচিত।

স্কেলযোগ্য সফ্টওয়্যার ডিজাইনের জন্য আরও ডেটা পাওয়ার সাথে সাথে অ্যালগরিদমের ব্যয় কীভাবে বৃদ্ধি পায় তা বিবেচনা করা। কখনও কখনও কেবল সঠিক ডেটা কাঠামো নির্বাচন করা যথেষ্ট। বিগ হে নোটেশন ব্যবহার করে ব্যয়গুলি সাধারণত বর্ণিত হয়

(আমি বুঝতে পারি যে এটি প্রশ্নের সরাসরি উত্তর নয়, তবে এটি কিছু পাঠকের পক্ষে কার্যকর হতে পারে your আমি যদি আপনার সময় নষ্ট করি তবে আমার ক্ষমা চাই!)


7
এটি সেরা উত্তর। দূরত্বের কার্যটি অনুকূল করতে কিছুই নেই; একটি কেবল এটি কম ঘন ঘন ব্যবহার করা প্রয়োজন।
সাম হোচেভার

3
গৃহীত উত্তরটি স্থানিক বিভাজনকেও কভার করে, অন্যথায় আপনার উত্তরটি সত্যই অনুকূল। ধন্যবাদ.
গ্রিমশো

আপনার উত্তরটি পড়তে আমার সময়টি খুব ভালভাবেই ব্যয় হয়েছিল। আপনাকে ধন্যবাদ, জো।
প্যাট্রিক এম

1
এটি সেরা উত্তর এবং একমাত্র দুরত্ব ফাংশন কর্মক্ষমতা লাল-হারিংয়ের পরিবর্তে আসল সমস্যাটিতে ফোকাস করে । গৃহীত উত্তরটি স্থানিক বিভাজনকেও ভালভাবে কভার করতে পারে তবে এটি একদিকে যেমন রয়েছে; এটি দূরত্ব গণনার উপর দৃষ্টি নিবদ্ধ করে। দূরত্ব হিসাব হয় না প্রাথমিক এখানে সমস্যা; দূরত্ব গণনার অনুকূলকরণ হ'ল একটি নিষ্ঠুর-শক্তি অ-সমাধান যা স্কেল করে না।
ম্যাক্সিমাস মিনিমাস

আপনি দয়া করে ব্যাখ্যা করতে পারেন কেন তুলনা সংখ্যাটি তাত্পর্যপূর্ণ হবে? আমি যদিও এটি চতুর্ভুজ হতে হবে, প্রতিটি সময় ফ্রেমের সময় প্রতিটি অভিনেতাকে একে অপরের সাথে তুলনা করি।
পেটর পুদলেক

4

চেবিশেভ দূরত্ব কেমন? পয়েন্ট প জন্য, কিউ এটি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়েছে:

দূরত্ব

সুতরাং পয়েন্টগুলির জন্য (2, 4) এবং (8, 5), চেবিশেভ দূরত্ব 6, হিসাবে | 2-8 | > | 4-5 |

তদ্ব্যতীত E কে ইউক্লিডিয়ান দূরত্ব এবং C চেবিশেভ দূরত্ব হতে দিন। তারপর:

distance2

বর্গমূলকে গণনা করতে হলে যেহেতু উপরের সীমাটি সম্ভবত খুব বেশি ব্যবহারযোগ্য নয় তবে নীচের গণ্ডিটি সহায়ক হতে পারে - যখনই চেবিশেভ দূরত্ব সীমার বাইরে থাকার পক্ষে যথেষ্ট হয়, ইউক্লিডিয়ান দূরত্বটি আপনাকে অবশ্যই বাঁচাতে হবে এটি গণনা করা থেকে।

বাণিজ্য বন্ধ, অবশ্যই, চেবিশেভ দূরত্ব যদি সীমার মধ্যে হয় তবে আপনাকে সময় নষ্ট করে যেভাবেই হোক ইউক্লিডিয়ান দূরত্ব গণনা করতে হবে। এটি একটি নেট জিত হবে কিনা তা খুঁজে বার করার একমাত্র উপায়!


1
আপনি ম্যানহাটনের দূরত্বকে ওপারবাউন্ড হিসাবে ব্যবহার করতে পারেন।
কংগ্রেসবঙ্গাস

1
যথেষ্ট সত্য। আমি মনে করি সেখান থেকে এটি কেবল একটি হপ, এড়িয়ে যান এবং খ্রিস্টের পরামর্শ অনুসারে "চেবিশেভ এবং ম্যানহাটনের গড় গড়ে" যেতে পারেন।
তেট্রিনিটি

2

একটি খুব সাধারণ স্থানীয় অপ্টিমাইজেশন হ'ল প্রথমে একক মাত্রা পরীক্ষা করা।

এটাই :

distance ( x1, y1 , x1, y2) > fabs (x2 - x1)

সুতরাং কেবল fabs (x2 - x1)প্রথম ফিল্টার হিসাবে পরীক্ষা করা একটি প্রশংসনীয় লাভ দিতে পারে। প্রাসঙ্গিক ব্যাপ্তি বনাম বিশ্বের আকারের উপর কতটা নির্ভর করবে।

তদতিরিক্ত, আপনি এটি স্থানিক পার্টিশন ডেটা কাঠামোর বিকল্প হিসাবে ব্যবহার করতে পারেন।

সমস্ত প্রাসঙ্গিক অবজেক্টগুলি যদি x স্থানাঙ্ক ক্রমের তালিকায় বাছাই করা হয় তবে নিকটে থাকা বস্তুগুলি অবশ্যই তালিকার নিকটে থাকা উচিত। এমনকি যদি বস্তুগুলি সরানো হিসাবে পুরোপুরি রক্ষণাবেক্ষণ না করার কারণে তালিকাটি অর্ডার থেকে বাইরে চলে যায়, তবে গতির সীমাবদ্ধ জ্ঞান দেওয়া থাকলেও আপনি পাশের বস্তুগুলির জন্য অনুসন্ধানের জন্য তালিকার অংশটি হ্রাস করতে পারেন।


2

অতীতে অপ্টিমাইজ করার চেষ্টা করা হয়েছিল sqrt। যদিও এটি এখনকার মেশিনগুলিতে আর প্রযোজ্য নয়, এখানে কোয়েকের উত্স কোডের একটি উদাহরণ রয়েছে, যা যাদু নম্বর ব্যবহার করে 0x5f3759df:

float Q_rsqrt( float number )
{
  long i;
  float x2, y;
  const float threehalfs = 1.5F;

  x2 = number * 0.5F;
  y  = number;
  i  = * ( long * ) &y;  // evil floating point bit level hacking
  i  = 0x5f3759df - ( i >> 1 ); // what the hell?
  y  = * ( float * ) &i;
  y  = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
  // y  = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration (optional)
  // ...
  return y;
}

এখানে কী চলছে তার একটি বিশদ বিবরণ উইকিপিডিয়ায় পাওয়া যাবে।

সংক্ষেপে, এটি নিউটনের পদ্ধতির কয়েকটি পুনরাবৃত্তি (একটি সংখ্যার অ্যালগোরিদম যা পুনরাবৃত্তভাবে একটি অনুমানকে উন্নত করে), যুক্তিসঙ্গত প্রাথমিক অনুমানের জন্য ব্যবহৃত ম্যাজিক নম্বরটি।

ট্র্যাভিস যেমন উল্লেখ করেছেন, এই জাতীয় অপ্টিমাইজেশানটি আধুনিক স্থাপত্যগুলিতে আর কার্যকর হয় না। এমনকি যদি তা হয় তবে এটি কেবলমাত্র আপনার বাটনেলেকে একটি স্থির হারের গতিবেগ সরবরাহ করতে পারে, যদিও অ্যালগরিদমিক পুনর্নির্মাণ আরও ভাল ফলাফল অর্জন করতে পারে।


2
এটি আর কোনও উপযুক্ত অপ্টিমাইজেশন নয়। আপনি আজকাল কিনতে পারেন এমন প্রায় সমস্ত গ্রাহক-গ্রেড পিসি আর্কিটেকচারে হার্ডওয়্যার-অনুকূলিত স্কয়ার্ট নির্দেশাবলী রয়েছে যা একটি ঘড়ির চক্র বা তার চেয়ে কম স্কোয়ারের মূল সম্পাদন করে। : আপনি কি সত্যিই দ্রুততম বর্গমূল সম্ভব প্রয়োজন হয়, আপনি এক্স 86 ভাসমান SIMD বিন্দু বর্গমূল নির্দেশ ব্যবহার en.wikipedia.org/wiki/... GPU এর মাধ্যমে শেডার মতো জিনিসগুলির জন্য, বর্গমূল কলিং স্বয়ংক্রিয়ভাবে যেমন একটি নির্দেশ স্থাপিত হবে। সিপিইউতে, আমি অনুমান করি যে অনেক সংকলক উপলব্ধ থাকলে সিমডি স্কয়ার্টের মাধ্যমে স্কয়ার্ট প্রয়োগ করে।
ট্র্যাভিসজি

@ ট্রাভিসজি হ্যাঁ এটি উল্লেখ করার মতো, তাই আমি উত্তরটি আপডেট করেছি। এই উত্তরটি কেবল মজাদার এবং historicalতিহাসিক আগ্রহের জন্য সরবরাহ করা হয়েছিল!
জোয়েটউইডল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.