গণিত ক্রিয়াকলাপগুলির জন্য কম্পিউটারগুলি একই ফলাফল পাওয়ার গ্যারান্টি দিতে আমার এখনও স্থির পয়েন্ট ব্যবহার করতে হবে?


9

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

আমি জিজ্ঞাসা করি কারণ আমি একটি নেটওয়ার্কে আরটিএস গেমটি তৈরির বিষয়ে গবেষণা করছি এবং কয়েকশ ইউনিটের অবস্থান সিঙ্ক করে নেওয়া খারাপ পথে যাওয়ার মত মনে হচ্ছে।

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

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

কম্পিউটারগুলি একই ফ্লোট পয়েন্ট স্ট্যান্ডার্ডটি অনুসরণ করলেও কি বিচ্যুতি রয়েছে?

আমি সি # তে এই গেমটি লিখছি তা নিশ্চিত নয় যদিও সে বিষয়টি গুরুত্বপূর্ণ, ভেবেছি আমি যেভাবেই এটি উল্লেখ করব।


এমনকি যদি তারা তা করে থাকে তবে আমি তার জন্য ভাসা ব্যবহার করব না
টেলাস্টিন

আপনি কি বোঝাতে চেয়েছেন ? কেন না?
ডাব্লুডিইউ

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

উত্তর:


18

কম্পিউটারগুলি একই ফ্লোট পয়েন্ট স্ট্যান্ডার্ডটি অনুসরণ করলেও কি বিচ্যুতি রয়েছে?

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

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


এই. কিছু মূল কারণ: আইইইই স্ট্যান্ড 754 এর মধ্যে optionচ্ছিক "হোল্ড" ক্লজ (যেমন এনএএন হ্যান্ডলিং) অন্তর্ভুক্ত রয়েছে এবং ডিজাইনের বিকল্পগুলি (যেমন আন্ডারফ্লো সনাক্তকরণ) অনুমতি দেয়। ভাষার বাইন্ডিংগুলি ভাসমান-বিন্দু স্ট্যান্ডার্ডকে সমর্থন করে তবুও তারা ভাসমান-পয়েন্টের এক্সপ্রেশনগুলির মূল্যায়ন করার সময় সংকলকটিকে ছেড়ে দিতে পারে, যেমন FLT_EVAL_METHODআইএসও সি / সি ++ এ। অতীন্দ্রিয় ফাংশন (যেমন sin, exp, log) মূলত উভয় আইইইই ফ্লোটিং পয়েন্ট মান এবং ভাষা মান প্রোগ্রামিং দ্বারা অধিনিয়ম করছে। একটি সাধারণ লাইব্রেরি সংস্করণ আপগ্রেড (উদাহরণস্বরূপ একটি নতুন glibcসংস্করণ) ফলাফলগুলি পৃথক করতে পারে।
njuffa

আমি নিজেই একটি খেলায় এটি আঘাত করেছি। আমার ল্যাপটপে রকেটটি সূক্ষ্মভাবে উড়েছিল, আমার ডেস্কটপে উড়বে না, সম্পূর্ণ অভিন্ন ইনস্টলেশন।
লরেন পেচটেল

3

ভাসমান পয়েন্ট ত্রুটি

প্রতিটি ভাসমান বিন্দু সংখ্যা গণনা করার জন্য ব্যবহৃত হওয়ায় অবোধকে জমা করে। এটি গণনা করার জন্য একটি অপ্রচলিত বিন্যাসটি ব্যবহার করার একটি সাধারণ ঘটনা The গণনাগুলি গণনার ক্রমের সাথে সংবেদনশীলও হয়, পরিবহণের গ্যারান্টিযুক্ত হয় না, যেমন: (a + b) + cহতে পারে বা একইরকম হতে পারে না a + (b + c)

অতিরিক্তভাবে প্রসেসরের অগত্যা মেমরি স্ট্যান্ডার্ডের মতো একই ম্যান্টিসার দৈর্ঘ্য নেই। এটি 32/64/128 বিট ফ্লোট হিসাবে আকর্ষণীয় আচরণ তৈরি করতে পারে মাঝেমধ্যে চালিত হয় যেন তাদের আরও বিট থাকে।

স্থির-পয়েন্ট ত্রুটি

বলা হচ্ছে স্থির-পয়েন্ট পাটিগণিতও ত্রুটিগুলি জমা করতে পারে। পার্থক্যটি হ'ল স্থির পয়েন্ট সংখ্যাগুলি কী নির্ভুলতা হারিয়েছে সে সম্পর্কে স্পষ্ট এবং নির্বাচিত ক্রিয়াকলাপগুলির উপর নির্ভর করে গোলিং ত্রুটিগুলি পুরোপুরি এড়াতে পারে। তারাও পরিবর্তনশীল (a + b) + c = a + (b + c)

কোনটি?

কোনটি ব্যবহার করবেন তা আপনার সম্পূর্ণ সম্পত্তিগুলির উপর নির্ভর করে।

ভাসমান পয়েন্ট সংখ্যা:

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

নির্দিষ্ট পয়েন্ট নম্বর:

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

1
"স্থির পয়েন্ট সংখ্যাগুলি কী নির্ভুলতা হারিয়েছে সে সম্পর্কে স্পষ্ট" - ভাসমান পয়েন্টগুলিও পরিষ্কার, পার্থক্যটি বরং স্থির পয়েন্টের ভুলগুলি সাধারণ জীবন সংখ্যার জন্য আরও স্বজ্ঞাত
কিয়াসনাম

1
সুতরাং কেবলমাত্র নির্দিষ্ট পয়েন্টটি গ্যারান্টি দেয় যে সমস্ত কম্পিউটার হার্ডওয়্যার নির্বিশেষে একই ত্রুটিগুলি / নির্ভুলতা ক্ষতিগ্রস্থ হবে?
ডাব্লুডিইউ

1
মূলত, হ্যাঁ, কারণ আপনি নির্দিষ্ট করতে পারেন যে আপনার নির্দিষ্ট পয়েন্ট সংখ্যাগুলি 32 বা 64 বিট, এবং সেগুলি সমস্ত সিস্টেমে থাকবে। ভাসমান পয়েন্ট সংখ্যাগুলি 32 বা 64-বিট হতে পারে তবে হার্ডওয়্যারটি আসলে গণনা করতে 48 বা 96 বিট ব্যবহার করতে পারে এবং শেষে 32 বা 64 বিটে রূপান্তর করতে পারে ফলে বিভিন্ন ধরণের হার্ডওয়্যারের মধ্যে পার্থক্য দেখা দেয়।
ব্যবহারকারী 1118321

@whatsisname ফ্লোটিং পয়েন্ট উল্লেখ বেশ স্পষ্ট হলেও, আপনি সহজেই আমাকে বলতে পারবে না কি rounding বিষয় আমি এই যোগফল সম্মুখীন হবে: (a + b * c) / d - eNaNশূন্য দ্বারা বিভাগ করা বা ওভারফ্লো / আন্ডারফ্লো যেমন সুস্পষ্ট সমস্যা বাদে এই অভিব্যক্তিটি ভুল হওয়া সম্ভব। যোগ করুন যে মেমরির মধ্যে বাধা এবং যথার্থতার সাথে নিবন্ধন করুন এমনকি "একই" ভাসমান পয়েন্ট মানটির স্মৃতি থেকে একটি সাধারণ লোড / স্টোরও পরিবর্তন পরিবর্তন করবে।
Kain0_0

@ কেইন ০.০: আপনি ঠিক বলেছেন, আমি কীসের মুখোমুখি হব তা সহজেই বলতে পারি না কারণ আমি ভাসমান বিষয় বিশেষজ্ঞ নই। আমি যখন "সাধারণ জীবন সংখ্যায় আরও স্বজ্ঞাত" বলি তখন এটাই বোঝানো হয়। আপনি যখন নির্দিষ্ট পয়েন্টটি "স্পষ্ট" এবং ভাসমান বিন্দুটি বলবেন না, আপনি এটিকে এমন শব্দ হিসাবে সাজাবেন যেহেতু ভাসমানগুলি আপাতদৃষ্টিতে এলোমেলোভাবে ভুল।
হোসনেম

-1

সেখানে প্রশ্ন কেন তুমি অভিন্ন ফলাফল গ্যারান্টি, যেহেতু অভিন্ন ফলাফল আদৌ কোন গ্যারান্টি দিতে আপনার ফলাফল নেই চাইবেন এর দরকারী

আপনার কাছে একটি সংখ্যাগতভাবে অস্থির অ্যালগরিদম থাকতে পারে যা বিভিন্ন কম্পিউটারে দুটি অভিন্ন কিন্তু সম্পূর্ণ অযৌক্তিক ফলাফল দেয়। যদি পার্থক্য থাকে তবে ফলাফলগুলি ১৩ ডিজিটের মধ্যে একই হয় তবে এটি অনেক বেশি বিশ্বাসযোগ্য।

খুব কমই এমন পরিস্থিতি রয়েছে যেখানে প্রজননযোগ্যতা সত্যই গুরুত্বপূর্ণ: একটি বিন্যাস ইঞ্জিনে, বা ক্ষতিহীন সংকোচনে / সংক্ষেপণ। নির্দিষ্ট পয়েন্টটি ব্যবহার করা বিপথগামী হওয়ার খুব সম্ভবত সম্ভাবনা রয়েছে।


আমি আপনার জবাবটিকে কমানোর চেষ্টা করি নি, তবে মনে হয় ওপি দ্বারা বর্ণিত কেসটি হ'ল "সেই কয়েকটি পরিস্থিতিতে একটি যেখানে প্রজননযোগ্যতা সত্যই গুরুত্বপূর্ণ"। আরটিএস গেমটিতে একটি ছোট গোলাকৃতি ত্রুটি "দুটি বস্তুর সংঘর্ষে" বা না পার্থক্য তৈরি করতে পারে।
ডক ব্রাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.