সি # তে কি ভাসমান-পয়েন্ট গণিত সামঞ্জস্য হয়? এটা হতে পারে?


155

না, এটি অন্য কোনও "কেন (1 / 3.0) * 3! = 1" প্রশ্ন নয়।

আমি ইদানীং অনেকটা ভাসমান-পয়েন্ট সম্পর্কে পড়ছি; বিশেষত, কীভাবে একই গণনা বিভিন্ন আর্কিটেকচার বা অপ্টিমাইজেশন সেটিংসে বিভিন্ন ফলাফল দিতে পারে

ভিডিও গেমগুলির ক্ষেত্রে এটি একটি সমস্যা যা পির -টু-পিয়ার নেটওয়র্ক (সার্ভার-ক্লায়েন্টের বিপরীতে) হয়, যা সমস্ত ক্লায়েন্টরা প্রোগ্রাম চালানোর সময় ঠিক একই ফলাফল উত্পন্ন করে - একটিতে সামান্য তাত্পর্য ভাসমান-পয়েন্ট গণনা বিভিন্ন মেশিনে (বা এমনকি একই মেশিনে! ) মারাত্মকভাবে আলাদা গেম-স্টেটের দিকে নিয়ে যেতে পারে

এটি প্রসেসরের মধ্যেও ঘটে যা আইইইই -754 "অনুসরণ" করে , মূলত কারণ কিছু প্রসেসর (x86) ডাবল বর্ধিত নির্ভুলতা ব্যবহার করে । এটি হ'ল, সমস্ত গণনা করতে তারা 80-বিট রেজিস্টার ব্যবহার করে, তারপরে 64- বা 32-বিটগুলিতে ছাঁটাই করে, গণনার জন্য 64- বা 32- বিট ব্যবহারকারী মেশিনগুলির চেয়ে বিভিন্ন বৃত্তাকার ফলাফলের দিকে নিয়ে যায়।

আমি অনলাইনে এই সমস্যার বেশ কয়েকটি সমাধান দেখেছি, তবে সমস্ত সি ++ এর জন্য, সি # নয়:

  • (উইন্ডোজ), (লিনাক্স?), বা (বিএসডি) doubleব্যবহার করে দ্বিগুণ প্রসারিত-নির্ভুলতা মোড (যাতে সমস্ত গণনাগুলি আইইইই-754 64-বিট ব্যবহার করে) অক্ষম করে ।_controlfp_s_FPU_SETCWfpsetprec
  • সর্বদা একই অপটিমাইজেশন সেটিংস সহ একই সংকলকটি চালান এবং সমস্ত ব্যবহারকারীদের একই সিপিইউ আর্কিটেকচার (কোনও ক্রস-প্ল্যাটফর্ম প্লে না) থাকা প্রয়োজন। কারণ আমার "সংকলক" আসলে জেআইটি, যা প্রতিটি সময় প্রোগ্রামটি চালিত হওয়ার পরে আলাদাভাবে অনুকূলিত হতে পারে , আমি মনে করি এটি সম্ভব কিনা।
  • নির্দিষ্ট পয়েন্ট গণিত ব্যবহার করুন, এবং এড়ানো floatএবং doubleপুরোপুরি। decimalএই উদ্দেশ্যে কাজ করবে, তবে অনেক ধীর হবে এবং System.Mathলাইব্রেরির কোনও কার্যই এটি সমর্থন করে না।

সুতরাং, এটি কি সি # তেও সমস্যা? আমি যদি কেবল উইন্ডোজকে সমর্থন করি না (মনো নয়)?

যদি তা হয় তবে আমার প্রোগ্রামটিকে সাধারণ ডাবল-স্পষ্টতাতে চালাতে বাধ্য করার কোনও উপায় আছে কি?

যদি তা না হয় তবে এমন কোনও গ্রন্থাগার রয়েছে যা ভাসমান-পয়েন্ট গণনাগুলিকে সামঞ্জস্য রাখতে সহায়তা করবে ?


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

1
কোনও উত্তর নয়, তবে আমি নিশ্চিত যে আপনি বেশিরভাগ ডোমেনে আপনি আপনার সিস্টেমটি এমনভাবে ডিজাইন করতে পারেন যাতে সমস্ত ভাগ করে নেওয়া রাষ্ট্র
নির্ঘাতবাদী হয়

1
@ পিটার আপনি। নেট জন্য কোন দ্রুত ভাসমান পয়েন্ট অনুকরণ সম্পর্কে জানেন?
কোডসইনচাউস

1
জাভা কি এই সমস্যায় ভুগছে?
জোশ

3
@ জোশ: জাভার strictfpকীওয়ার্ড রয়েছে, যা বর্ধিত আকারের পরিবর্তে বর্ণিত আকারে ( floatবা double) সমস্ত গণনা করতে বাধ্য করে । তবে জাভাতে এখনও আইইই -754 সমর্থন নিয়ে অনেক সমস্যা রয়েছে। খুব (খুব, খুব) কয়েকটি প্রোগ্রামিং ল্যাঙ্গুয়েজ আইইই-75৫৪ ভালভাবে সমর্থন করে।
ছদ্মবেশ দিন

উত্তর:


52

আমি নেট থেকে স্বাভাবিক ভাসমান পয়েন্টগুলি নির্ধারণ করার কোনও উপায় জানি না। JITter কে এমন কোড তৈরি করার অনুমতি দেওয়া হয়েছে যা বিভিন্ন প্ল্যাটফর্মগুলিতে (বা .net এর বিভিন্ন সংস্করণের মধ্যে) ভিন্ন আচরণ করে। সুতরাং floatডিটারমিনিস্টিক। নেট কোডে সাধারণ গুলি ব্যবহার করা সম্ভব নয়।

আমি বিবেচনা করা কর্মক্ষেত্র:

  1. সি # তে ফিক্সডপয়েন্টপয়েন্ট 32 প্রয়োগ করুন। যদিও এটি খুব কঠিন নয় (আমার অর্ধেক সমাপ্তি বাস্তবায়ন হয়েছে) মানগুলির খুব অল্প পরিসীমা এটি ব্যবহারে বিরক্তিকর করে তোলে। আপনাকে সর্বদা সতর্কতা অবলম্বন করতে হবে যাতে আপনি না উপচে পড়ে যান, না খুব বেশি নির্ভুলতা হারাবেন। শেষ পর্যন্ত আমি সরাসরি পূর্ণসংখ্যার ব্যবহারের চেয়ে সহজ এটি দেখতে পেলাম।
  2. সি # তে ফিক্সডপয়েন্ট পয়েন্ট 64 প্রয়োগ করুন। আমি এটি করতে চেয়ে বরং কঠিন পেয়েছি। কিছু ক্রিয়াকলাপের জন্য 128 বিটের মধ্যবর্তী পূর্ণসংখ্যা কার্যকর হবে। কিন্তু। নেট এই ধরণের প্রস্তাব দেয় না।
  3. একটি কাস্টম 32 বিট ফ্লোটিংপয়েন্ট কার্যকর করুন। বিটস্ক্যানরাইভার্স অন্তর্নিহিতের অভাব যখন এটি প্রয়োগ করা হয় তখন কয়েকটি বিরক্তির কারণ হয়। তবে বর্তমানে আমি মনে করি এটি সর্বাধিক প্রতিশ্রুতিবদ্ধ পথ।
  4. গণিত ক্রিয়াকলাপের জন্য নেটিভ কোড ব্যবহার করুন। প্রতিটি গণিতের অপারেশনে ডেলিগেট কলের ওভারহেড অন্তর্ভুক্ত।

আমি সম্প্রতি 32 বিট ভাসমান পয়েন্ট গণিতের একটি সফ্টওয়্যার বাস্তবায়ন শুরু করেছি। এটি আমার 2.66GHz i3 এ প্রতি সেকেন্ডে প্রায় 70 মিলিয়ন সংযোজন / গুণগুলি করতে পারে। https://github.com/CodesInChaos/SoftFloat । স্পষ্টতই এটি এখনও খুব অসম্পূর্ণ এবং বগি।


2
একটি "সীমাহীন" আকারের পূর্ণসংখ্যক বিগআইন্টিজার উপলভ্য রয়েছে যদিও এটি নেটিভ ইনট বা তত দীর্ঘ দীর্ঘ নয় N নেট এই ধরণের প্রস্তাব দেয় (এফ # আমি বিশ্বাস করি এর জন্য তৈরি কিন্তু সি # তে ব্যবহার করা যেতে পারে)
রুন এফএস

অন্য বিকল্পটি .NET এর জন্য জিএনইউ এমপি র‌্যাপার । এটি জিএনইউ মাল্টিপল প্রিসিন লাইব্রেরির চারপাশে একটি মোড়ক যা "অনির্দিষ্ট" নির্ভুল সংখ্যার, যুক্তি (ভগ্নাংশ) এবং ভাসমান পয়েন্ট সংখ্যা সমর্থন করে।
কোল জনসন

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

আমি এমন একটি বিশেষ কেস সম্পর্কে শিখেছি যেখানে ভাসমান পয়েন্টগুলি হ'ল ডিস্ট্রিমেন্টিক। আমার কাছে পাওয়া ব্যাখ্যাটি হল: গুণন / বিভাগের জন্য, যদি কোনও এফপি সংখ্যার দুটি সংখ্যা (2 ^ x) পাওয়ার হয়, গণনার সময় উল্লেখযোগ্য / ম্যান্টিসা পরিবর্তন হবে না। কেবল এক্সপোনেন্ট পরিবর্তন হবে (পয়েন্ট সরানো হবে)। সুতরাং রাউন্ডিং কখনই ঘটবে না। ফলাফল নির্দোষ হবে।
জিগজ্যাগ

উদাহরণ: 2 ^ 32 এর মতো একটি সংখ্যা উপস্থাপিত হয় (ঘোষক: 32, ম্যান্টিসা: 1)। যদি আমরা এটিকে অন্য ফ্লোট (এক্সপ্রেস, ম্যান) দিয়ে গুণ করি তবে ফলাফলটি হবে (এক্সপ্রেস +32, ম্যান * 1)। বিভাগের জন্য, ফলাফল (এক্সপো - 32, লোক * 1)। মান্টিসাকে 1 দ্বারা গুণিত করা মান্টিসাকে পরিবর্তন করে না, সুতরাং এটি কত বিটযুক্ত তা বিবেচ্য নয়।
জিগজ্যাগ

28

সি # স্পেসিফিকেশন (§4.1.6 ফ্লোটিং পয়েন্টের ধরণগুলি) বিশেষত ফলাফলের চেয়ে উচ্চতর নির্ভুলতা ব্যবহার করে ভাসমান পয়েন্ট গণনাগুলি করার অনুমতি দেয়। সুতরাং, না, আমি মনে করি না আপনি এই গণনাগুলি সরাসরি। নেট এ নির্ধারণ করতে পারেন। অন্যরা বিভিন্ন কাজের প্রস্তাব দেয়, যাতে আপনি তাদের চেষ্টা করে দেখতে পারেন।


9
আমি কেবল বুঝতে পেরেছি যে কেউ সংকলিত সমাবেশগুলি বিতরণ করে তবে সি # স্পেসিফিকেশন আসলেই কিছু যায় আসে না। এটি কেবল তখনই গুরুত্বপূর্ণ যখন কেউ উত্সের সামঞ্জস্যতা চায়। আসলে কী গুরুত্বপূর্ণ তা হল সিএলআর স্পেসিফিকেশন। তবে আমি নিশ্চিত যে এর গ্যারান্টিগুলি সি # এর গ্যারান্টির মতোই দুর্বল।
কোডসইনচাওস

doubleধারাবাহিকভাবে ফলস্বরূপ অপারেশন স্ট্রিপটি অযাচিত বিটগুলি সরিয়ে দেওয়ার পরে কি প্রতিটি সময় কাস্টিং হবে না ?
ইলিডানএস 4 মনিকাকে

2
@ IllidanS4 আমি মনে করি না এটি ধারাবাহিক ফলাফলের গ্যারান্টি দেবে।
সুইভ

14

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

http://www.math.utah.edu/~beebe/software/ieee/

নির্দিষ্ট পয়েন্টে একটি নোট

বাইনারি ফিক্সড পয়েন্ট সংখ্যাগুলিও ভাসমান পয়েন্টের বিকল্প হিসাবে ভাল কাজ করতে পারে, যেমনটি চারটি বুনিয়াদি গাণিতিক ক্রিয়াকলাপ থেকে প্রমাণিত:

  • সংযোজন এবং বিয়োগটি তুচ্ছ। তারা পূর্ণসংখ্যার মতো একইভাবে কাজ করে। শুধু যোগ বা বিয়োগ!
  • দুটি নির্ধারিত বিন্দুর সংখ্যাগুলিকে গুন করতে, দুটি সংখ্যাটি গুণ করে তারপরে সংখ্যাসূচক বিটের সংখ্যার ডানদিকে শিফট করুন।
  • দুটি নির্দিষ্ট পয়েন্ট সংখ্যা বিভক্ত করতে, লভ্যাংশ স্থানান্তরিত বিটের সংজ্ঞায়িত সংখ্যাটি বামে স্থানান্তর করুন, তারপরে বিভাজক দ্বারা ভাগ করুন।
  • এই কাগজের চতুর্থ অধ্যায়ে বাইনারি নির্দিষ্ট পয়েন্ট নম্বর বাস্তবায়নের জন্য অতিরিক্ত নির্দেশিকা রয়েছে।

বাইনারি ফিক্সড পয়েন্ট নম্বরগুলি কোনও পূর্ণসংখ্যার ডেটা টাইপ যেমন ইনট, লং এবং বিগইন্টিজার এবং নন-সিএলএস-কমপ্লায়েন্ট টাইপ ইউিন্ট এবং উলংয়ের ক্ষেত্রে প্রয়োগ করা যেতে পারে।

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

// Assume each number has a 12 bit fractional part. (1/4096)
// Each entry in the lookup table corresponds to a fixed point number
//  with an 8-bit fractional part (1/256)
input+=(1<<3); // Add 2^3 for rounding purposes
input>>=4; // Shift right by 4 (to get 8-bit fractional part)
// --- clamp or restrict input here --
// Look up value.
return lookupTable[input];

5
আপনার এটি ওপেন সোর্স কোড প্রোজেক্ট সাইটে আপলোড করা উচিত, সোর্সফোর্জ বা গিথাবের মতো। এটি অনুসন্ধান করা সহজ করে তোলে, অবদান রাখতে সহজ করে তোলে, আপনার জীবনবৃত্তান্ত আরও সহজ করে তোলা ইত্যাদি Also এছাড়াও কয়েকটি উত্স-কোড টিপস (উপেক্ষা করে নির্দ্বিধায়): ধ্রুবকের constপরিবর্তে ব্যবহার করুন static, যাতে সংকলক সেগুলি অনুকূল করতে পারে; স্ট্যাটিক ফাংশনগুলিতে সদস্য ফাংশনগুলি পছন্দ করুন (যাতে আমরা কল করতে পারি, প্রাক্তন myDouble.LeadingZeros()পরিবর্তে IntDouble.LeadingZeros(myDouble)); একক-বর্ণের পরিবর্তনশীল নামগুলি এড়িয়ে চলার চেষ্টা করুন ( MultiplyAnyLengthউদাহরণস্বরূপ, 9 টি রয়েছে, এটি অনুসরণ করা খুব কঠিন করে
তোলে

ব্যবহার সতর্কতা অবলম্বন করা আবশ্যক uncheckedএবং অ CLS-অনুবর্তী মত ধরনের ulong, uintইত্যাদি গতি উদ্দেশ্যে - কারণ তারা যাতে খুব কমই ব্যবহার করা হয়, জে আই টি JIT তাদের সহিংস নিখুত না, তাই ব্যবহার করে সেগুলি আসলে হতে পারে ধীর মত স্বাভাবিক ধরনের ব্যবহার না করে longএবং int। এছাড়াও, সি # এর অপারেটর ওভারলোডিং রয়েছে , যা এই প্রকল্পটি থেকে ব্যাপকভাবে উপকৃত হবে। অবশেষে, কোন যুক্ত ইউনিট-পরীক্ষা আছে? এই ছোট জিনিসগুলি ছাড়াও, আশ্চর্যজনক কাজ পিটার, এটি হাস্যকরভাবে চিত্তাকর্ষক!
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

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

2
মজার বিষয় হ'ল আমি যখন আপনার ব্লগে পোস্ট করেছি তখন আমি খেয়াল করিনি যে ব্লগটি আপনার। আমি সবেমাত্র গুগল + চেষ্টা করার সিদ্ধান্ত নিয়েছিলাম এবং এর সি # স্পার্কে এটি ব্লগ প্রবেশের পরামর্শ দিয়েছে। তাই আমি ভেবেছিলাম "একই সাথে এই জাতীয় লেখা শুরু করা আমাদের দুজনের জন্য কী এক অসাধারণ কাকতালীয়"। তবে অবশ্যই আমাদের একই ট্রিগার ছিল :)
CodeInChaos

1
কেন জাভাতে এই পোর্টিং বিরক্ত করবেন? জাভা ইতিমধ্যে ডিটারমিনিস্টিক ভাসমান পয়েন্ট গণিতের মাধ্যমে গ্যারান্টিযুক্ত strictfp
এন্টিমোনি

9

এটি কি সি # এর জন্য সমস্যা?

হ্যাঁ. বিভিন্ন আর্কিটেকচার আপনার উদ্বেগের মধ্যে সবচেয়ে কম, বিভিন্ন ফ্রেমরেট ইত্যাদির ফলে ভাসমান উপস্থাপনাগুলিতে ভুল হওয়ার কারণে বিচ্যুতি ঘটতে পারে - যদিও সেগুলি একই ভুল (যেমন একই মেশিনের ধীরে ধীরে জিপিইউ ব্যতীত একই আর্কিটেকচার)।

আমি কি সিস্টেম.ডিসিমাল ব্যবহার করতে পারি?

আপনি পারবেন না এমন কোনও কারণ নেই, তবে এটি কুকুর ধীর।

আমার প্রোগ্রামটি ডাবল স্পষ্টতার সাথে চালাতে বাধ্য করার কোনও উপায় আছে কি?

হ্যাঁ. সিএলআর রানটাইম নিজেই হোস্ট করুন ; এবং CorBindToRuntimeEx কল করার আগে সমস্ত nessecary কল / ফ্ল্যাগ (যা ভাসমান পয়েন্ট পাটিগণিতের আচরণ পরিবর্তন করে) সি ++ অ্যাপ্লিকেশনে সংকলন করুন।

এমন কোনও লাইব্রেরি রয়েছে যা ভাসমান পয়েন্টের গণনাগুলিকে সামঞ্জস্য রাখতে সহায়তা করবে?

আমি যে জানি না।

এটি সমাধান করার অন্য উপায় আছে?

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

মনে রাখবেন যে ফ্রেমরেট এখনও এগুলিকে প্রভাবিত করতে পারে তবে এটি ততটা খারাপ নয় এবং সিঙ্ক্রোনাইজেশন পয়েন্টগুলি ব্যবহার করে সহজেই সংশোধন করা হয়।

আমি কিউএন নাম্বার সহ আরও গাণিতিক ফাংশন ব্যবহার করতে পারি?

হ্যাঁ, এটি করতে এক দশমিক রাউন্ড ট্রিপ। তদ্ব্যতীত, আপনার সত্যিকার অর্থে ট্রিগ (সাইন, কোস) ফাংশনগুলির জন্য অনুসন্ধান সারণী ব্যবহার করা উচিত ; যেহেতু এগুলি সত্যিই বিভিন্ন প্ল্যাটফর্মে বিভিন্ন ফলাফল দিতে পারে - এবং আপনি যদি তাদের সঠিকভাবে কোড করেন তবে তারা সরাসরি কিউএন নাম্বার ব্যবহার করতে পারেন।


3
ফ্রেমরেটগুলি ইস্যু হওয়ার সাথে আপনি কী সম্পর্কে কথা বলছেন তা নিশ্চিত নয়। স্পষ্টতই আপনি একটি স্থির আপডেট-রেট (উদাহরণস্বরূপ এখানে দেখুন ) রাখতে চান - এটি ডিসপ্লে-ফ্রেমরেট অপ্রাসঙ্গিক কিনা। যতক্ষণ না সমস্ত মেশিনে অপ্রতুলতা একই থাকে ততক্ষণ আমরা ভাল। আমি আপনার তৃতীয় উত্তরটি মোটেই বুঝতে পারি না।
ব্লুরাজা - ড্যানি প্লেফুঘুফুট

@ ব্লুরাজা: উত্তর "আমার প্রোগ্রামকে দ্বিগুণ যথাযথভাবে চালাতে বাধ্য করার কোনও উপায় আছে কি?" হয় পুরো কমন ল্যাঙ্গুয়েজ রানটাইম, যা অত্যন্ত জটিল হতে পারে বা সি # অ্যাপ্লিকেশন থেকে সি ++ ডিএলএল নেটিভ কলগুলি ব্যবহার করে, যেমন ব্যবহারকারী শেলিবুটারফ্লাইয়ের উত্তরে ইঙ্গিত দেওয়া হয়েছে amount "কিউএন নাম্বার" কেবলমাত্র বাইনারি ফিক্সড পয়েন্ট সংখ্যা হিসাবে চিন্তা করুন, যেমনটি আমার উত্তরে ইঙ্গিত করা হয়েছে (বাইনারি ফিক্সড পয়েন্ট নম্বরগুলিকে আমি "কিউএন নাম্বার" বলে দেখিনি।)
পিটার ও।

@ পিটার ও। আপনার রানটাইমটি পুনরায় সংশোধন করার দরকার নেই। আমি আমার সংস্থায় যে সার্ভারটিতে কাজ করি সেগুলি সিএলআর রানটাইমটিকে স্থানীয় সি ++ অ্যাপ্লিকেশন হিসাবে হোস্ট করে (এসকিউএল সার্ভারটিও তাই করে)। আমি আপনাকে কর্ডবাইন্ডটো রুনটাইমেক্স গুগল করার পরামর্শ দিচ্ছি।
জোনাথন ডিকিনসন

@ ব্লুরাজা এটি প্রশ্নে থাকা গেমের উপর নির্ভর করে। সমস্ত গেমগুলিতে স্থির ফ্রেমরেট পদক্ষেপগুলি প্রয়োগ করা একটি কার্যকর বিকল্প নয় - কারণ এওই অ্যালগরিদম কৃত্রিম বিলম্বের প্রবর্তন করে; যা কোনও এফপিএস হিসাবে অগ্রহণযোগ্য।
জোনাথন ডিকিনসন

1
@Jonathan এই পিয়ার টু পিয়ার গেম যা শুধুমাত্র ইনপুট পাঠাতে একমাত্র একটি বিষয় - এই, আপনি আছে একটি নির্দিষ্ট আপডেট হার আছে। বেশিরভাগ এফপিএস এর মতো কাজ করে না, তবে অল্প অল্প অল্প কিছু লোকেরই নির্দিষ্ট আপডেট-রেট থাকে। এই প্রশ্নটি দেখুন ।
ব্লুরাজা - ড্যানি পিফ্লুঘিওফ্ট

6

সামান্য পুরানো এই এমএসডিএন ব্লগ এন্ট্রি অনুসারে জেআইটি এসএসই / এসএসই 2 ব্যবহার করবে না ভাসমান পয়েন্টের জন্য, এটি সবই এক্স x87। সে কারণে, আপনি যেমনটি উল্লেখ করেছেন আপনাকে মোড এবং পতাকাগুলি সম্পর্কে চিন্তা করতে হবে এবং সি # তে এটি নিয়ন্ত্রণ করা সম্ভব নয়। সুতরাং স্বাভাবিক ভাসমান পয়েন্ট অপারেশনগুলি ব্যবহার করা আপনার প্রোগ্রামের প্রতিটি মেশিনে ঠিক একই ফলাফলের গ্যারান্টি দেয় না।

দ্বিগুণ নির্ভুলতার যথাযথ প্রজননযোগ্যতা পেতে আপনাকে সফ্টওয়্যার ফ্লোটিং পয়েন্ট (বা স্থির বিন্দু) এমুলেশন করতে হবে। আমি এটি করতে সি # লাইব্রেরি সম্পর্কে জানি না।

আপনার প্রয়োজনীয় অপারেশনগুলির উপর নির্ভর করে আপনি একক নির্ভুলতা নিয়ে পালাতে সক্ষম হতে পারেন। এই ধারণাটি এখানে:

  • আপনার যত্ন নেওয়া সমস্ত মান একক নির্ভুলতায় সংরক্ষণ করুন
  • অপারেশন করতে:
    • নির্ভুলতায় ডাবল প্রসারিত করুন expand
    • ডাবল স্পষ্টতা মধ্যে অপারেশন করবেন
    • ফলাফলকে একক নির্ভুলতায় ফিরিয়ে আনুন

এক্স ৮ with-এর বড় সমস্যা হ'ল গণনাগুলি নির্ভুলতার পতাকার উপর নির্ভর করে 53-বিট বা bit৪-বিট যথার্থতার মধ্যে করা যেতে পারে এবং নিবন্ধটি স্মৃতিতে ছড়িয়ে পড়েছে কিনা depending তবে অনেক ক্রিয়াকলাপের জন্য, উচ্চ নির্ভুলতার সাথে অপারেশন করা এবং নিম্ন নির্ভুলতায় ফিরে আসা সঠিক উত্তরটির গ্যারান্টি দেবে, যা বোঝায় যে উত্তরটি সমস্ত সিস্টেমে একইরকম হবে বলে গ্যারান্টিযুক্ত হবে। আপনি অতিরিক্ত নির্ভুলতা পান কিনা তা বিবেচনাধীন নয়, যেহেতু উভয় ক্ষেত্রেই সঠিক উত্তরটির গ্যারান্টি দেওয়ার জন্য আপনার যথেষ্ট যথাযথতা রয়েছে।

এই স্কিমটিতে যে অপারেশনগুলি কাজ করা উচিত: সংযোজন, বিয়োগ, গুণ, বিভাগ, বর্গক্ষেত্র। পাপ, সম্প্রসারণ ইত্যাদির মতো জিনিসগুলি কাজ করবে না (ফলাফলগুলি সাধারণত মিলবে তবে কোনও গ্যারান্টি নেই)। "কখন দ্বিগুণ গোলাকার নির্দোষ?" এসিএম রেফারেন্স (প্রদত্ত রেজি। রেখা।)

আশাকরি এটা সাহায্য করবে!


2
এটি এমন একটি সমস্যা যে। নেট 5, বা 6 বা 42, আর x87 গণনা মোড ব্যবহার নাও করতে পারে। স্ট্যান্ডার্ডে এটির প্রয়োজন নেই এমন কিছুই নেই।
এরিক জে।

5

যেমন ইতিমধ্যে অন্যান্য উত্তরে বলা হয়েছে: হ্যাঁ, এটি সি # তে একটি সমস্যা - খাঁটি উইন্ডোজ থাকা অবস্থায়ও।

একটি সমাধান হিসাবে: আপনি বিল্ট-ইন BigIntegerক্লাস ব্যবহার করেন এবং এই জাতীয় সংখ্যার কোনও গণনা / স্টোরেজের জন্য একটি সাধারণ ডিনমিনেটর ব্যবহার করে একটি নির্ধারিত নির্ভুলতায় সমস্ত গণনাগুলি স্কেলিং করা হলে আপনি (এবং কিছু প্রচেষ্টা / পারফরম্যান্সের হিট দিয়ে) সমস্যাটি সম্পূর্ণভাবে এড়াতে পারবেন ।

ওপি দ্বারা অনুরোধ হিসাবে - কর্মক্ষমতা সম্পর্কে:

System.Decimalচিহ্নটির জন্য 1 বিট এবং 96 বিট ইন্টিজার এবং একটি "স্কেল" (দশমিক পয়েন্ট যেখানে রয়েছে তা উপস্থাপন করে) সহ সংখ্যাটি উপস্থাপন করে। আপনার যে সমস্ত গণনা করা হয়েছে তার জন্য এটি অবশ্যই এই ডেটা কাঠামোতে পরিচালনা করে এবং সিপিইউতে নির্মিত কোনও ভাসমান পয়েন্ট নির্দেশিকা ব্যবহার করতে পারে না।

BigInteger"সমাধান" অনুরূপ কিছু নেই - আপনি নির্ধারণ করতে পারেন শুধু তাই আপনি কতটা ডিজিটের প্রয়োজন / চায় ... সম্ভবত আপনি মাত্র 80 বিট বা সঠিকতার 240 বিট চাই।

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

পারফরম্যান্স হিট কমিয়ে আনার জন্য বিভিন্ন কৌশল রয়েছে - যেমন কিউএন নাম্বার (জনাথন ডিকিনসনের উত্তর দেখুন - ভাসমান-পয়েন্ট গণিতটি কি সি # তে সামঞ্জস্যপূর্ণ? এটি কি হতে পারে? ) এবং / অথবা ক্যাচিং (উদাহরণস্বরূপ ট্রিগের গণনা ...) ইত্যাদি etc.


1
নোট যেটি BigIntegerশুধুমাত্র নেট নেট in.০ এ উপলব্ধ।
সুইভ

আমার অনুমান যে পারফরম্যান্স হিট BigIntegerএমনকি দশমিকের দ্বারা সম্পাদিত পারফরম্যান্সের ছাড়িয়ে যায়।
কোডসইনচওস

এখানে উত্তরে কয়েকবার Decimal(@ BigIntegerজোনাথন ডিকিনসন - 'কুকুর ধীর') বা (@ কোডিএনচায়োস মন্তব্য উপরে) ব্যবহারের পারফরম্যান্স হিটের রেফারেন্স পাওয়া যায় - কেউ কি দয়া করে এই পারফরম্যান্সের হিটগুলি সম্পর্কে একটু ব্যাখ্যা প্রদান করতে পারেন এবং না / কেন তারা সমাধান দেওয়ার জন্য সত্যই শো-স্টপার্স।
ব্যারি কায়ে

@ ইয়াহিয়া - সম্পাদনার জন্য আপনাকে ধন্যবাদ - আকর্ষণীয় পাঠ্য, তবে আপনি দয়া করে একটি বল-পার্ক অনুমান করতে পারছেন না যে 'ফ্লোট' ব্যবহার না করার পারফরম্যান্সের জন্য আমরা কী 10% ধীর বা 10 বার ধীর কথা বলছি - আমি শুধু নিহিত পরিমাণের ক্রমের জন্য একটি অনুভূতি পেতে চাই।
ব্যারি কায়ে

এটি "মাত্র 10%" এর চেয়ে 1: 5 এর অঞ্চলে আরও বেশি
ইয়াহিয়া

2

ভাল, এখানে আমার প্রথম প্রয়াস হবে এই কিভাবে করতে হবে :

  1. আপনার সমালোচনামূলক ভাসমান পয়েন্ট ক্রিয়াকলাপের জন্য ব্যবহৃত হতে পারে এটিএলএলডিএল প্রকল্প তৈরি করুন যাতে এতে একটি সাধারণ অবজেক্ট থাকে। এটি ফ্ল্যাগিং পয়েন্ট করতে কোনও xx87 হার্ডওয়্যার ব্যবহার করে অক্ষম করে এমন পতাকাগুলির সাথে সংকলন করতে ভুলবেন না।
  2. ফ্লোটিং পয়েন্ট অপারেশনগুলিকে কল করে এবং ফলাফলগুলি ফিরিয়ে দেয় এমন ফাংশন তৈরি করুন; সহজ শুরু করুন এবং তারপরে এটি যদি আপনার পক্ষে কাজ করে তবে আপনি প্রয়োজনে পরে আপনার কার্য সম্পাদনের প্রয়োজনগুলি পূরণ করার জন্য সর্বদা জটিলতা বাড়িয়ে তুলতে পারেন।
  3. এটি সমস্ত মেশিনে একই পদ্ধতিতে সম্পন্ন হয়েছে তা নিশ্চিত করার জন্য কন্ট্রোল_এফপি কলগুলি প্রকৃত গণিতের চারপাশে রাখুন।
  4. এটি আপনার প্রত্যাশার মতো কাজ করে তা নিশ্চিত করতে আপনার নতুন লাইব্রেরি এবং পরীক্ষাটি উল্লেখ করুন।

(আমি বিশ্বাস করি আপনি কেবল একটি 32-বিট। Dll সংকলন করতে পারেন এবং তারপরে এটি x86 বা যেকোন সিপু দিয়ে ব্যবহার করতে পারেন [বা সম্ভবত কেবলমাত্র 86৪-বিট সিস্টেমে x86 টার্গেট করে; নীচে মন্তব্য দেখুন]))

তারপরে, এটি কাজ করে ধরে নিলে, আপনি কি মনোো ব্যবহার করতে চান আমার ধারণা আপনি অন্য x86 প্ল্যাটফর্মের লাইব্রেরিটি একই ধরণের তৈরি করতে সক্ষম হবেন (অবশ্যই সিওএম নয়; যদিও, সম্ভবত, ওয়াইন দিয়ে? একবার আমার অঞ্চল থেকে একটু বাইরে) আমরা যদিও সেখানে যাই ...)।

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


"একটি 32-বিট .dll এবং তারপর ব্যবহার করুন ... যেকোন সিপু" আমার মনে হয় 32 বিট সিস্টেমে চলাকালীন এটি কেবল তখনই কাজ করবে। Bit৪ বিট সিস্টেমে কেবলমাত্র একটি প্রোগ্রাম টার্গেট x86করে 32 বিট ডিএল লোড করতে সক্ষম হবে।
কোডসইনচওস

2

আমি কোনও গেম ডেভেলপার নই, যদিও আমার কাছে কম্পিউটারের জটিল সমস্যাগুলির অনেক অভিজ্ঞতা আছে ... সুতরাং, আমি যথাসাধ্য চেষ্টা করব।

কৌশলটি আমি গ্রহণ করব মূলত এটি:

  • একটি ধীর গতির (প্রয়োজনে; যদি দ্রুততর উপায় থাকে তবে দুর্দান্ত!) ব্যবহার করুন তবে পুনরুত্পাদনযোগ্য ফলাফল পেতে অনুমানযোগ্য পদ্ধতি
  • অন্য কিছুর জন্য ডাবল ব্যবহার করুন (যেমন, উপস্থাপনা)

এর সংক্ষিপ্ত দীর্ঘতা: আপনার ভারসাম্য খুঁজে নেওয়া দরকার। যদি আপনি 30ms রেন্ডারিং (~ 33fps) ব্যয় করে থাকেন এবং সংঘর্ষ সনাক্তকরণের জন্য 1 মিমি ব্যয় করছেন (বা কিছু অন্য অত্যন্ত সংবেদনশীল অপারেশন সন্নিবেশ করিয়েছেন) - আপনি সমালোচনামূলক গাণিতিক করতে সময়টি দ্বিগুণ করলেও, আপনার ফ্রেমারেটের উপর এর প্রভাবটি পড়বে আপনি 33.3fps থেকে 30.3fps এ নেমে যান।

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


1

অন্যান্য উত্তরের লিঙ্কগুলি পরীক্ষা করে এটি পরিষ্কার করে দেয় আপনার ভাসমান পয়েন্টটি "সঠিকভাবে" প্রয়োগ করা হয়েছে কিনা আপনি কোনও গ্যারান্টি পাবেন না বা আপনি সর্বদা প্রদত্ত গণনার জন্য একটি নির্দিষ্ট নির্ভুলতা পাবেন কিনা তবে সম্ভবত আপনি সর্বোত্তম চেষ্টা করতে পারেন (১) সমস্ত গণনা একটি সাধারণ সর্বনিম্নে কেটে দেওয়া (উদাহরণস্বরূপ, যদি বিভিন্ন বাস্তবায়ন আপনাকে 32 থেকে 80 বিট দিতে হবে, সর্বদা প্রতিটি অপারেশনকে 30 বা 31 বিট করে দেয়), (২) শুরুতে কয়েকটি পরীক্ষার ক্ষেত্রে একটি টেবিল থাকে (অ্যাড, বিয়োগ, গুণ, ভাগ, স্কয়ার্ট, কোসাইন ইত্যাদির বর্ডারলাইন কেস) এবং যদি প্রয়োগটি টেবিলের সাথে মানগুলির মান গণনা করে তবে কোনও সামঞ্জস্য করার পক্ষে বিরক্ত করবেন না।


সর্বদা প্রতিটি অপারেশনকে 30 বা 31 বিটে ছাঁটাই করা - floatx86 মেশিনে ডেটাটাইপ ঠিক এইভাবে কাজ করে - তবে এটি কেবল 32-বিট ব্যবহার করে সমস্ত গণনা করে এমন মেশিনগুলির থেকে কিছুটা ভিন্ন ফলাফল ঘটায় এবং এই ছোট পরিবর্তনগুলি সময়ের সাথে সাথে প্রচার করবে। সুতরাং, প্রশ্ন।
ব্লুরাজা - ডেনি প্লেফুঘুফুট

যদি "এন বিটস অফ প্রিসিটি" অর্থ যে কোনও গণনা সেই বিটগুলির সাথে নির্ভুল, এবং মেশিন এ 32 বিটের সাথে যথাযথ এবং মেশিন বি 48 বিটের ক্ষেত্রে সঠিক, তবে উভয় মেশিন দ্বারা কোনও গণনার প্রথম 32 বিট অভিন্ন হওয়া উচিত। প্রতিটি অপারেশনের পরে 32 টি বিট বা তারও কম সংক্ষেপে দুটি মেশিনকে ঠিক সিঙ্কে রাখবে না? যদি না হয় তবে এর উদাহরণ কী?
সাক্ষী সুরক্ষা আইডি 44583292

-3

আপনার প্রশ্নটি বেশ কঠিন এবং প্রযুক্তিগত জিনিসগুলিতে রয়েছে O_o। তবে আমার ধারণা থাকতে পারে।

আপনি অবশ্যই জানেন যে সিপিইউ কোনও ভাসমান ক্রিয়াকলাপ পরে কিছু সামঞ্জস্য করে। এবং সিপিইউ বিভিন্ন বিভিন্ন নির্দেশনা দেয় যা বিভিন্ন রাউন্ডিং অপারেশন করে।

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

বৃত্তাকার সমন্বয় দ্বারা করা 'ভুল' প্রতিটি পরবর্তী নির্দেশাবলীতে বৃদ্ধি পাবে।

উদাহরণ হিসাবে আমরা বলতে পারি যে অ্যাসেম্বলি পর্যায়ে: a * b * c একটি * c * b এর সমতুল্য নয়।

আমি এ সম্পর্কে পুরোপুরি নিশ্চিত নই, আপনার সিপিইউ আর্কিটেকচার জানেন এমন কাউকে আপনার চেয়ে জিজ্ঞাসা করতে হবে: পি

তবে আপনার প্রশ্নের উত্তর দেওয়ার জন্য: সি বা সি ++ এ আপনি আপনার সমস্যার সমাধান করতে পারেন কারণ আপনার সংকলক দ্বারা তৈরি করা মেশিন কোডে আপনার কিছু নিয়ন্ত্রণ রয়েছে তবে NET এ আপনার কোনওটি নেই। সুতরাং যতক্ষণ না আপনার মেশিনের কোড আলাদা হতে পারে, আপনি কখনই সঠিক ফলাফল সম্পর্কে নিশ্চিত হতে পারবেন না।

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

আমি আশা করি আমি যথেষ্ট পরিষ্কার হয়ে গিয়েছি, আমি ইংরেজিতে নিখুঁত নই (... মোটেও: গুলি)


9
একটি পি 2 পি শ্যুটার কল্পনা করুন। আপনি একটি লোককে গুলি করেন, আপনি তাকে আঘাত করেন এবং তিনি মারা যান, তবে এটি খুব কাছাকাছি, আপনি প্রায় মিস করেছেন। অন্য লোকের পিসিতে কিছুটা আলাদা গণনা ব্যবহার করা হয় এবং এটি আপনাকে মিস করে এমন গণনা করে। সমস্যা কি এখন দেখছেন? এই ক্ষেত্রে, নিবন্ধগুলির আকার বাড়ানো কোনও উপকারে আসবে না (কমপক্ষে সম্পূর্ণরূপে নয়)। প্রতিটি কম্পিউটারে ঠিক একই গণনা ব্যবহার করে।
সোভিক

5
এই দৃশ্যকল্প এক সাধারণত কিভাবে বন্ধ ফলাফলের প্রকৃত ফলাফলের হয় যত্ন সম্পর্কে না (যতদিন যুক্তিযুক্ত হিসাবে), কিন্তু আসলে একটি এটি হয় ঠিক সকল ব্যবহারকারীর জন্য একই।
কোডসইনচাউস

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

2
@ এসগর: হ্যাঁ, বেশিরভাগ শুটাররা এভাবেই কাজ করেন; সেই "কর্তৃপক্ষ" কে সার্ভার বলা হয় এবং আমরা সামগ্রিক আর্কিটেকচারকে "ক্লায়েন্ট / সার্ভার" আর্কিটেকচার বলি। তবে, আর এক ধরণের আর্কিটেকচার রয়েছে: পিয়ার-টু-পিয়ার। পি 2 পি তে কোনও সার্ভার নেই; বরং, সমস্ত ক্লায়েন্টকে কিছু হওয়ার আগে একে অপরের সাথে সমস্ত ক্রিয়া যাচাই করতে হবে। এটি ল্যাগ বাড়িয়ে তোলে, এটি শ্যুটারদের পক্ষে গ্রহণযোগ্য নয়, তবে নেটওয়ার্ক ট্র্যাফিককে ব্যাপকভাবে হ্রাস করে, এমন গেমগুলির জন্য একে একে নিখুঁত করে তোলে যেখানে একটি ছোট ল্যাগ (~ 250 মিলিয়ন) গ্রহণযোগ্য, তবে পুরো গেমের স্টেটের সিঙ্ক করা এটি নয়। যথা, আরটিএস গেমস সি এবং সি এবং স্টারক্রাফ্টের মতো পি 2 পি ব্যবহার করে।
ব্লুরাজা - ড্যানি প্লেফুঘুফুট

5
একটি পি 2 পি গেম আপনার উপর নির্ভর করার মতো কোনও বিশ্বস্ত মেশিন নেই। যদি আপনি কোনও স্টেশনকে তার বুলেট আঘাত হানে বা না তা স্থির করার অনুমতি দেয় তবে আপনি কোনও ক্লায়েন্টের প্রতারণার সম্ভাবনাটি উন্মুক্ত করেন। তদ্ব্যতীত, লিঙ্কগুলি এমনকি পরিমাণের পরিমাণের পরিমাণগুলিও হ্যান্ডেল করতে পারে না - গেমগুলি ফলাফলের চেয়ে অর্ডার প্রেরণে কাজ করে। আমি আরটিএস গেমস খেলি এবং অনেক সময় দেখেছি যে এতগুলি আবর্জনা প্রায় চারদিকে উড়ছে normal এমন কোনও উপায় নেই যে এটি সাধারণ পরিবারের উর্ধে পাঠানো যায় না।
লরেন পেচটেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.