আমি কীভাবে একটি ডিস্ট্রিমেন্টিক পদার্থবিজ্ঞানের সিমুলেশন সম্পাদন করতে পারি?


43

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

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

আমি কীভাবে আমার খেলায় এই নির্ধারণবাদ অর্জন করতে পারি? আমি জাভাস্ক্রিপ্ট, সি ++, জাভা, পাইথন এবং সি # সহ বিভিন্ন ফ্রেমওয়ার্ক এবং ভাষা ব্যবহার করতে আগ্রহী।

আমি বাক্স 2 ডি (সি ++) এর পাশাপাশি অন্যান্য ভাষায় এর সমতুল্য দ্বারা প্রলুব্ধ হয়েছি কারণ এটি আমার চাহিদা মেটাচ্ছে বলে মনে হচ্ছে তবে এটিতে ভাসমান বিন্দু নির্ধারণের অভাব রয়েছে, বিশেষত ত্রিকোণমিত্রিক ক্রিয়া সহ।

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

আমার প্রয়োজন অনুসারে কোন বিদ্যমান ইঞ্জিন ব্যবহার বা সংশোধন করা সম্ভব? নাকি আমার নিজের থেকেই ইঞ্জিন তৈরির দরকার হবে?

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

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

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


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে । যদি আপনি মনে করেন যে আপনার সমস্যার সমাধান রয়েছে তবে দয়া করে কোনও মন্তব্য করার চেয়ে উত্তর হিসাবে পোস্ট করা বিবেচনা করুন - এটি সম্পাদনা করা, ভোটদান / স্বীকৃত চিহ্নিতকরণের মাধ্যমে মূল্যায়ন করা সহজ করে দেয় বা পরামর্শের পরিবর্তে প্রতিক্রিয়াটির জন্য নিজেই সরাসরি মন্তব্য করতে সহায়তা করে makes উত্তরগুলি একটি দীর্ঘ কথোপকথনের থ্রেডে বুনানো।
DMGregory

উত্তর:


45

একটি নিয়ামক পদ্ধতিতে ভাসমান পয়েন্ট সংখ্যা পরিচালনা করার জন্য

ভাসমান বিন্দু নির্বিচারক is ঠিক আছে, এটা হওয়া উচিত। এটা জটিল.

ভাসমান পয়েন্ট সংখ্যাগুলিতে প্রচুর সাহিত্য রয়েছে:

এবং কীভাবে তারা সমস্যাযুক্ত:

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


এমন একটি ইনপুট যা সমস্যার সৃষ্টি করে তা হ'ল সময়।

প্রথমত, আপনার সর্বদা একই টাইমস্টেপ গণনা করা উচিত। আমি সময় পরিমাপ না করার জন্য বলছি না, আমি বলছি যে আপনি পদার্থবিজ্ঞানের সিমুলেশনে সময় দেবেন না, কারণ সময়ের বিভিন্নতা সিমুলেশনটিতে শব্দের উত্স।

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

এভাবে:

  • সময় পরিমাপ: হ্যাঁ
  • সিমুলেশন সময় ব্যবহার করুন: না

এখন, নির্দেশ পুনর্নির্মাণ।

সংকলক সিদ্ধান্ত নিতে পারে যে f * a + bএটি একই b + f * a, তবে এর ভিন্ন ফলাফল হতে পারে। এটি fmadd তেও সংকলন করতে পারে , বা এটি একসাথে ঘটে যাওয়ার মতো একাধিক লাইন নিয়ে সিদ্ধান্ত নিতে পারে এবং সিমড দিয়ে এগুলি লিখতে পারে , বা অন্য কোনও অপ্টিমাইজেশন আমি এই মুহূর্তে ভাবতে পারি না। এবং মনে রাখবেন আমরা একই ক্রমানুসারে একই ক্রিয়াকলাপ ঘটতে চাই, এটি কারণ হিসাবে আসে যে আমরা কী অপারেশনগুলি ঘটে তা নিয়ন্ত্রণ করতে চাই।

এবং না, ডাবল ব্যবহার করা আপনাকে বাঁচায় না।

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

যুক্তিযুক্তভাবে, রচনা সমাবেশ আদর্শ হবে। এই পদ্ধতিতে আপনি সিদ্ধান্ত নিন কী অপারেশন করবেন। তবে একাধিক প্ল্যাটফর্ম সমর্থন করার ক্ষেত্রে এটি সমস্যা হতে পারে।

এভাবে:


নির্দিষ্ট পয়েন্ট সংখ্যাগুলির ক্ষেত্রে case

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

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

নোট আমি স্কেল বলে। ধারণাটি হল যে 1 ইউনিটটি আসলে দুটি হিসাবে শক্তি হিসাবে উপস্থাপিত হবে (উদাহরণস্বরূপ 16384)। যাই হোক না কেন, এটি একটি ধ্রুবক তৈরি করুন এবং এটি ব্যবহার করুন। আপনি মূলত এটি নির্দিষ্ট পয়েন্ট নম্বর হিসাবে ব্যবহার করছেন। আসলে, আপনি যদি কিছু নির্ভরযোগ্য লাইব্রেরি থেকে যথাযথ নির্দিষ্ট পয়েন্ট নম্বর ব্যবহার করতে পারেন use

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

এভাবে:

  • মানগুলি ছোট রাখুন: হ্যাঁ
  • যত্নবান গোলাকার: হ্যাঁ
  • যখন সম্ভব স্থির পয়েন্ট নম্বর: হ্যাঁ

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

আপনি কি জানতেন যে তারা মূল প্লেস্টেশনের জন্য এ জাতীয় জিনিসগুলি করেছে? দয়া করে আমার কুকুর, প্যাচগুলি পূরণ করুন

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

সুতরাং: সংশোধিত পয়েন্ট নম্বর ব্যবহার করুন।


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

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


আরো দেখুন:


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


পদার্থবিজ্ঞান করার আরেকটি উপায়

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

আমি মনে করি না যে আমরা একই মেশিনে একটি থ্রেড ব্যবহার করে একটি একক বিল্ড দেখতে পাব একই ইনপুট দ্বারা বিভিন্ন আউটপুট দেয়। তবুও, অন্য মেশিনে এটি পারে, বা অন্য একটি বিল্ড পারে could

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


তবে দূরে কাজ না করার পক্ষে যুক্তিও রয়েছে যা এত ত্রুটি জমে। সম্ভবত এটি একটি ভিন্ন উপায়ে পদার্থবিজ্ঞান করার সুযোগ।

আপনি জানেন যে, অবিচ্ছিন্ন এবং পৃথক পদার্থবিজ্ঞান রয়েছে, উভয়ই প্রতিটি বস্তুর টাইমস্টেপে কত অগ্রসর হবে তা নিয়ে কাজ করে। যাইহোক, অবিচ্ছিন্ন পদার্থবিজ্ঞানের সংঘর্ষ হয়েছে কিনা তা দেখার জন্য বিভিন্ন সম্ভাব্য তাত্ক্ষণিক তদন্তের পরিবর্তে সংঘর্ষের তাত্ক্ষণিক চিত্র বের করার উপায় রয়েছে has

সুতরাং, আমি নিম্নলিখিতগুলি প্রস্তাব করছি: প্রতিটি বস্তুর পরবর্তী সংঘর্ষ কখন ঘটবে, তা বোঝার জন্য অবিচ্ছিন্ন পদার্থবিজ্ঞানের কৌশলগুলি ব্যবহার করুন, একটি বড় টাইমস্টেপ সহ, একক সিমুলেশন পদক্ষেপের এটির চেয়ে অনেক বড়। তারপরে আপনি নিকটতম সংঘর্ষের তাত্ক্ষণিকভাবে নেবেন এবং খুঁজে বের করুন যে তাত্ক্ষণিক সময়ে সবকিছু কী হবে।

হ্যাঁ, এটি একটি একক সিমুলেশন পদক্ষেপের অনেক কাজ। তার মানে যে সিমুলেশন তাত্ক্ষণিকভাবে শুরু হবে না ...

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

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


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


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


অভিযোজ্য বস্তু

মন্তব্যে ওপি থেকে :

ধারণাটি হল প্লেয়াররা তাদের মেশিনগুলিকে কিছু ফর্ম্যাটে (যেমন এক্সএমএল বা জসন) সংরক্ষণ করতে সক্ষম হবে, যাতে প্রতিটি টুকরো অবস্থান এবং ঘূর্ণন রেকর্ড করা যায়। সেই এক্সএমএল বা জেসন ফাইলটি অন্য প্লেয়ারের কম্পিউটারে মেশিনটি পুনরুত্পাদন করতে ব্যবহৃত হবে।

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


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ভাইল্যাঙ্কোর্ট

2
দুর্দান্ত উত্তর! স্থির পয়েন্টের পক্ষে আরও 2 টি পয়েন্ট: 1. ভাসমান পয়েন্টটি উত্স থেকে আরও কাছাকাছি বা আরও বেশি আচরণ করবে (যদি আপনার একই ধাঁধাটি অন্য কোনও জায়গায় থাকে) তবে স্থির বিন্দুটি হবে না; ২. স্থির বিন্দুতে এর সীমার বেশিরভাগের জন্য ভাসমান পয়েন্টের তুলনায় আরও স্পষ্টতা রয়েছে - আপনি স্থির পয়েন্টটি ভালভাবে ব্যবহার করে নির্ভুলতা অর্জন করতে পারেন
Jibb স্মার্ট

base64উপাদান ব্যবহার করে এক্সএমএল এবং জেএসএন উভয় ক্ষেত্রে বাইনারি ডেটা এনকোড করা সম্ভব । এ জাতীয় ডেটা বিপুল পরিমাণে উপস্থাপনের পক্ষে এটি কোনও কার্যকর উপায় নয় তবে এগুলি বোঝাতে ভুল হবে যে তারা বাইনারি উপস্থাপনাগুলি ব্যবহার আটকাচ্ছে।
পিকালেক

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

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

6

আমি এমন একটি সংস্থার জন্য কাজ করি যা একটি নির্দিষ্ট পরিচিত রিয়েল-টাইম কৌশল খেলা তৈরি করে এবং আমি আপনাকে বলতে পারি যে ভাসমান পয়েন্ট নির্ধারণ সম্ভব।

বিভিন্ন সংকলক, বা বিভিন্ন সেটিংস সহ একই সংকলক, বা এমনকি একই সংকলকটির বিভিন্ন সংস্করণ, সমস্তই নির্ধারণবাদকে ভেঙে ফেলতে পারে।

যদি আপনার প্ল্যাটফর্ম বা গেম সংস্করণগুলির মধ্যে ক্রসপ্লে দরকার হয় তবে আমি মনে করি আপনাকে স্থির পয়েন্টে যেতে হবে - একমাত্র সম্ভাব্য ক্রসপ্লে যা আমি ভাসমান পয়েন্টের সাথে সচেতন, এটি পিসি এবং এক্সবক্স 1 এর মধ্যে, তবে এটি বেশ উন্মাদ।

আপনাকে হয় কোনও পদার্থবিজ্ঞান ইঞ্জিনের সন্ধান করতে হবে যা সম্পূর্ণরূপে নির্বিচারে, বা একটি মুক্ত উত্স ইঞ্জিন নিয়ে এটিকে নির্বিচারে তৈরি করতে, বা নিজের ইঞ্জিনটি রোল করতে হবে। আমার মাথার উপরের দিক থেকে আমার একটা অনুভূতি আছে যে সমস্ত জিনিসের Unক্যই একটি ডিটারমিনিস্টিক পদার্থবিজ্ঞান ইঞ্জিন যুক্ত করেছে, তবে আমি নিশ্চিত নই যে এটি সমস্ত মেশিনে কেবল একই মেশিনে বা নির্বিচারবাদী কিনা deter

আপনি যদি নিজের নিজস্ব জিনিসপত্র রোল করার চেষ্টা করতে চলেছেন তবে কয়েকটি জিনিস যা সহায়তা করতে পারে:

  • আইইই 7575৪ ফ্লোটগুলি নির্বিচারক হয় যদি আপনি খুব বেশি ফলসজ্জা কিছু না করেন (গুগল "আইইই 4৫৪ নির্ধারণবাদ" কী আছে বা কী আচ্ছন্ন নয় সে সম্পর্কে আরও তথ্যের জন্য)
  • আপনার অবশ্যই নিশ্চিত করতে হবে যে প্রতিটি ক্লায়েন্টের তাদের গোলাকার মোড এবং যথার্থতা অভিন্নভাবে সেট করা আছে (এটি সেট করার জন্য কন্ট্রোলএফপি ব্যবহার করুন)
  • রাউন্ডিং মোড এবং স্পষ্টতা নির্দিষ্ট গণিতের লাইব্রেরি দ্বারা পরিবর্তন করা যেতে পারে, তাই যদি আপনি কোনও বন্ধ লিবস ব্যবহার করেন তবে তারা কল করার পরে এগুলি পরীক্ষা করতে চাইতে পারেন (আবার চেক করতে নিয়ন্ত্রণফপি ব্যবহার করে)
  • কিছু সিমড নির্দেশাবলী হস্তক্ষেপমূলক হয়, অনেক কিছু হয় না, সাবধানতা অবলম্বন করুন
  • উপরে উল্লিখিত হিসাবে, নির্ধারণের বিষয়টি নিশ্চিত করতে আপনার একই প্ল্যাটফর্মের প্রয়োজন, একই সংকলকের একই সঠিক সংস্করণ, একই কনফিগারেশনটি একই সংকলক সেটিংস সহ সংকলন করে
  • রাষ্ট্রীয় ডিজাইনসগুলি সনাক্ত করতে কিছু সরঞ্জাম তৈরি করুন, এবং তাদের নির্ণয়ে সহায়তা করুন - যেমন সিআরসি যখন কোনও ডিজাইনক ঘটে তখন সনাক্ত করতে প্রতিটি ফ্রেম সিআরসি করে, তারপরে একটি ভারবস লগিং মোড থাকে যেখানে আপনি সক্ষম করতে পারেন যেখানে গেমের অবস্থার পরিবর্তনগুলি কোনও ফাইলটিতে শ্রমসাধ্যভাবে লগইন করা হয়েছে, তারপরে সিমুলেশন থেকে 2 টি ফাইল নিন যা প্রতিটিের থেকে অবতরণ করা হয়েছে এবং কোথায় ভুল হয়েছে তা দেখতে একটি ভিন্ন সরঞ্জামের সাথে তুলনা করুন
  • গেমের রাজ্যে আপনার সমস্ত ভেরিয়েবল সূচনা করুন, ডিজাইনের প্রধান উত্স
  • পুরো গেম সিমুলেশনটি প্রতিবারের মতো ডিজাইনস এড়ানোর জন্য ঠিক একই ক্রমে ঘটতে হবে, এই ভুলটি অর্জন করা অবিশ্বাস্যরকম সহজ, এটি আপনার গেম সিমুলেশনটিকে এমনভাবে গঠনের পরামর্শ দেয় যাতে এটি হ্রাস পায়। আমি সত্যই কোনও সফ্টওয়্যার ডিজাইনের ধাঁচের লোক নই, তবে এই ক্ষেত্রে এটি সম্ভবত একটি ভাল ধারণা - আপনি এমন এক ধরণের প্যাটার্ন বিবেচনা করতে পারেন যেখানে গেম সিমুলেশনটি একটি সুরক্ষিত বাক্সের মতো, এবং গেমের অবস্থার পরিবর্তনের একমাত্র উপায় sertোকানো is "বার্তা" বা "কমান্ডগুলি", গেম স্টেটের বাইরের যে কোনও কিছুতে (যেমন রেন্ডারিং, নেটওয়ার্কিং ইত্যাদি) কেবলমাত্র কনস্ট অ্যাক্সেস সরবরাহ করে। সুতরাং মাল্টিপ্লেয়ার গেমের জন্য সিমুলেশনটি নেটওয়ার্কিংয়ের মাধ্যমে এই কমান্ডগুলি নেটওয়ার্কের মাধ্যমে প্রেরণ করা বা একই সিমুলেশনটি পুনরায় খেলানো প্রথম বারের মতো আদেশগুলির প্রবাহ রেকর্ড করার ক্ষেত্রে,

1
Dataক্য প্রকৃতপক্ষে তাদের ডেটা-ওরিয়েন্টেড টেকনোলজি স্ট্যাকের জন্য তাদের নতুন ইউনিটি ফিজিক্স সিস্টেমের সাথে ক্রস-প্ল্যাটফর্ম নির্ধারণের লক্ষ্যে কাজ করছে, তবে আমি এটি বুঝতে পেরেছি, এটি এখনও একটি কাজ চলছে এবং এখনও তাকটি ব্যবহারের জন্য সম্পূর্ণ / প্রস্তুত নয়।
ডিএমগ্রিগরি

নন-ডিটারমিনিস্টিক সিমডি নির্দেশনার উদাহরণ কী? আপনার চিন্তা করছেন আনুমানিক মত বেশী rsqrtps?
রুসলান

@ ডিএমজি গ্রেগরিটি অবশ্যই পূর্বরূপে থাকতে হবে, আপনি এটি ইতিমধ্যে ব্যবহার করতে পারেন - তবে আপনি যেমন বলেছিলেন এটি এখনও শেষ হয়নি।
জো

@ রুসলান হ্যাঁ এসএসকিআরটিপিএস / আরসিপিপিএস ফলাফল বাস্তবায়ন নির্ভর
জো

5

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

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


1
আমি পুরোপুরি একমত. এইভাবে আপনি সমস্ত ব্যবহারকারীর সাথে ভাগ করে নেওয়া অভিজ্ঞতার গ্যারান্টি দেন। গেমদেব.স্ট্যাকেক্সেঞ্জাওয়েজ / প্রশ্নস / 456645৫/২ প্রকারে ক্লায়েন্ট সাইড বনাম সার্ভার সাইড ফিজিক্সের মধ্যে পার্থক্যের তুলনা করে একটি অনুরূপ বিষয় নিয়ে আলোচনা করে।
টিম হল্ট

1

আমি একটি পাল্টা স্বজ্ঞাত পরামর্শ দিতে যাচ্ছি, যদিও 100% নির্ভরযোগ্য নয়, বেশিরভাগ সময় সূক্ষ্মভাবে কাজ করা উচিত এবং এটি কার্যকর করা খুব সহজ।

নির্ভুলতা হ্রাস করুন।

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

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

এখন, প্রযুক্তিগতভাবে বলতে গেলে এটি অবশ্যই সম্ভব যে কোনও পুনর্নির্মাণের ফলে এমন একটি বিচ্যুতি ঘটবে যা উচ্চতর তাত্পর্যপূর্ণ সংখ্যায় পৌঁছায়, তবে যদি বিচ্যুতিগুলি কেবলমাত্র ভাসা-কারণ এবং আপনার মানগুলি ক্রমাগত শারীরিক পরিমাণের প্রতিনিধিত্ব করে, এটি অত্যন্ত অসম্ভব। মনে রাখবেন যে doubleকোনও দুটিয়ের মধ্যে অর্ধ বিলিয়ন মান রয়েছে single, তাই বেশিরভাগ সিমুলেশনের সময়-ধাপের সিংহভাগ সিমুলেশন রানের মধ্যে ঠিক একই রকম হতে পারে বলে আশা করা যায়। কোয়ান্টেসাইজেশনের মাধ্যমে কোনও বিচ্যুতি এটি তৈরি করে এমন কয়েকটি ক্ষেত্রে আশাকরি এমন অনুকরণগুলি হবে যা এত দিন চলবে না (কমপক্ষে বিশৃঙ্খল গতিবেগে নয়)।


আপনি যে বিষয়ে জিজ্ঞাসা করছেন তার সম্পূর্ণ বিপরীত পদ্ধতির বিষয়টি বিবেচনা করার জন্য আমি আপনাকে সুপারিশ করব: অনিশ্চয়তাটি গ্রহণ করুন ! আচরণটি যদি কিছুটা নির্ধারিত হয়, তবে এটি প্রকৃত পদার্থবিজ্ঞানের পরীক্ষাগুলির কাছাকাছি। সুতরাং, কেন প্রতিটি সিমুলেশন রানের জন্য প্রারম্ভিক পরামিতিগুলি ইচ্ছাকৃতভাবে এলোমেলো করে না , এবং এটিকে প্রয়োজনীয়তা তৈরি করে না যে একাধিক পরীক্ষার ক্ষেত্রে সিমুলেশন ধারাবাহিকভাবে সফল হয়? এটি পদার্থবিদ্যার বিষয়ে এবং মেশিনগুলিকে কীভাবে শক্ত / লিনিয়ার পর্যাপ্ত পর্যাপ্ত হতে পারে তার বিষয়ে আরও অনেক কিছু শিখিয়ে দেবে, কেবলমাত্র একটি সিমুলেশনটিতে বাস্তবসম্মত super


বৃত্তাকার ডাউন সাহায্য করবে না, কারণ উচ্চ নির্ভুলতা ফলাফল যদি অ-নিরঙ্কুশাত্মক হয় তবে পরিণামে ফলাফলটি একটি সিস্টেমে একদিকে এবং অন্য পদ্ধতিতে অন্য পদ্ধতিতে চলেছে। উদাহরণস্বরূপ আপনি সর্বদা নিকটতম পূর্ণসংখ্যায় যেতে পারেন তবে তার পরে একটি সিস্টেমের কম্পিউটারগুলি 1.0 এবং অন্যটি কম্পিউটারগুলি 0.99999999999999999999999999999999999999999999 এ যায় এবং সেগুলি আলাদাভাবে বেরিয়ে আসে।
yoyo

হ্যাঁ এটি সম্ভব, আমি ইতিমধ্যে উত্তরে বলেছি। তবে গেম ফিজিক্সের অন্যান্য সমস্যাগুলির মতো এটি খুব কমই ঘটবে । সুতরাং rounding করে সাহায্যের। (আমি করতে চাই না বৃত্তাকার নিচে যদিও; বৃত্তাকার নিকটতম টু-biasing এড়ানো।)
leftaroundabout

0

নম্বর সংরক্ষণের জন্য নিজের ক্লাস তৈরি করুন!

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

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


3
যৌক্তিক গাণিতিক কোনও ধরণের সংখ্যাসূচক একীকরণের জন্য একেবারে অপ্রচলিত। এমনকি যদি প্রতিটি সময়-পদক্ষেপ কেবল * / + -তখনই ঘটে থাকে তবে সময়ের সাথে সাথে ডিনোনিটরগুলি আরও বড় এবং বড় হবে।
বাম দিকের বাইরে

আমি প্রত্যাশা করব যে সংহতকরণ বিবেচনা না করেও এটি ভাল সমাধান হতে পারে না কারণ কেবল কয়েক গুণ বা ভাগ হওয়ার পরে আপনার সংখ্যা এবং ডিনমিনেটরের প্রতিনিধিত্বকারী সংখ্যাগুলি একটি 64-বিট পূর্ণসংখ্যাকে উপচে ফেলবে।
jvn91173

0

এখানে পরিভাষার কিছু বিভ্রান্তি রয়েছে। একটি শারীরিক ব্যবস্থা পুরোপুরি নির্বিচারে হতে পারে তবে দরকারী সময়কালের জন্য মডেল করা অসম্ভব কারণ এর আচরণটি প্রাথমিক অবস্থার সাথে অত্যন্ত সংবেদনশীল এবং প্রাথমিক অবস্থার মধ্যে একটি স্বল্পতম পরিবর্তন সম্পূর্ণ ভিন্ন আচরণ তৈরি করে produce

এখানে একটি আসল ডিভাইসের একটি ভিডিও যার আচরণগতভাবে একটি পরিসংখ্যানগত দিক থেকে বাদ দিয়ে ইচ্ছাকৃতভাবে অনাকাঙ্ক্ষিত:

https://www.youtube.com/watch?v=EvHiee7gs9Y

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

এটির সমাধানের সর্বোত্তম উপায় হ'ল সমস্যাটির উত্সটিতে আক্রমণ করা: আপনার গেমের পদার্থবিজ্ঞানকে নির্জনবাদী হিসাবে তৈরি করুন কারণ এটি পুনরুত্পাদনযোগ্য ফলাফল পাওয়ার জন্য প্রয়োজন।

বিকল্পটি হ'ল কম্পিউটার সফটওয়্যারটিকে এমন কোনও মডেল তৈরি করতে টুইটার দ্বারা নির্দোষী করার চেষ্টা করা যা পদার্থবিজ্ঞান নির্দিষ্ট করে না। সমস্যাটি হ'ল আপনি সিস্টেমে জটিলতার আরও কয়েকটি স্তর প্রবর্তন করেছেন, পদার্থবিজ্ঞানের স্পষ্টভাবে পরিবর্তনের সাথে তুলনা করে।

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

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

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


1
পরিভাষায় আমি কোনও বিভ্রান্তি দেখছি না। ওপি একটি সম্ভাব্য বিশৃঙ্খল ব্যবস্থা থেকে নির্বিচারবাদী আচরণ চায়। এটি পুরোপুরি করণীয়।
চিহ্নিত করুন

সহজ আকার (যেমন চেনাশোনা এবং আয়তক্ষেত্রগুলি) ব্যবহার করা সমস্যাটিকে মোটেই পরিবর্তন করে না। আপনার এখনও প্রচুর
ট্রিগনোমেট্রিক

-1

একক ভাসমান পয়েন্ট যথার্থতার পরিবর্তে ডাবল ফ্লোটিং পয়েন্ট যথার্থতা ব্যবহার করুন । নিখুঁত না হলেও এটি আপনার পদার্থবিজ্ঞানে ডিটারমিনিস্টিক হিসাবে বিবেচিত হওয়ার পক্ষে যথেষ্ট সঠিক। আপনি ডাবল ভাসমান পয়েন্ট যথার্থতার সাথে একটি রকেট চাঁদে পাঠাতে পারেন, তবে একক ভাসমান পয়েন্ট যথার্থতা নয়।

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


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

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

@ ফ্রেসেল, স্থির-পয়েন্ট যথার্থতার উদাহরণ হিসাবে, আইবিএম 1400 সিরিজটি স্বেচ্ছাসেবী-নির্ভুলতা স্থির-পয়েন্ট দশমিক গণিত ব্যবহার করেছিল। প্রতিটি সংখ্যায় 624 ডিজিট উত্সর্গ করুন এবং আপনি ডাবল-স্পষ্টতা ভাসমান পয়েন্টের পরিসীমা এবং যথার্থতা ছাড়িয়ে গেছেন।
চিহ্নিত করুন

@ ফ্রেসনেল (২) ভাল পয়েন্ট। একই সংখ্যক বিট ধরে আমি আমার উত্তর আপডেট করেছি।
ইভোরর

-2

মেমেন্টো প্যাটার্নটি ব্যবহার করুন ।

আপনার প্রাথমিক রান চলাকালীন প্রতিটি ফ্রেমে অবস্থানিক ডেটা বা আপনার যেটি বেঞ্চমার্ক প্রয়োজন সেভ করুন। যদি এটি খুব অসাধারণ হয় তবে কেবলমাত্র প্রতিটি এন ফ্রেমে এটি করুন।

তারপরে আপনি যখন সিমুলেশনটি পুনরুত্পাদন করবেন তখন স্বেচ্ছাচারিত পদার্থবিজ্ঞান অনুসরণ করুন, তবে প্রতি এন ফ্রেমে অবস্থানিক ডেটা আপডেট করুন।

অত্যধিক সরলিকৃত সিউডো কোড:

function Update():
    if(firstRun) then (SaveData(frame, position));
    else if(reproducedRun) then (this.position = GetData(frame));

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

@DMGregory এটি সঠিক ধন্যবাদ.
jvn91173
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.