সবচেয়ে বড় "আপেক্ষিক" স্তরটি আমি ভাসাটি ব্যবহার করে তৈরি করতে পারি?


13

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

যদি আমি আমার স্তরের আকারকে সীমাবদ্ধ করতে বেছে নিই, তবে আমার অবজেক্টটি চপ্পল হতে শুরু না হওয়া অবধি আমার ন্যূনতম গতি কীভাবে গতিতে পারে তা গণনা করব?

উত্তর:


26

একটি 32-বিট ফ্লোটে একটি 23 বিট ম্যান্ডিশা রয়েছে

এর মানে হল যে প্রতিটি সংখ্যা 1.xxx XXX এর XXX XXX এর XXX XXX এর XXX xx 2, যেখানে প্রতিটি x একটি বাইনারি অঙ্ক, হয় 0 বা 1. (কম অত্যন্ত ছোট denormalized সংখ্যার ব্যতিক্রম সঙ্গে সময় কিছু শক্তি প্রতিনিধিত্ব করা হয় 2126 - এগুলি 1 এর পরিবর্তে 0 দিয়ে শুরু হবে, তবে এরপরে আমি তাদের এড়িয়ে যাব)

সুতরাং 2i এবং 2(i+1) পরিসীমাতে, আপনি ± 2 ( i - 24 ) এর নির্ভুলতার মধ্যে যে কোনও সংখ্যা উপস্থাপন করতে পারেন±2(i24)

i=0(20)1=1(20)(1+223)1+224224

In this range:                You get accuracy within:
-----------------------------------------------
         0.25   -     0.5    2^-26 = 1.490 116 119 384 77 E-08
         0.5    -     1      2^-25 = 2.980 232 238 769 53 E-08
         1     -      2      2^-24 = 5.960 464 477 539 06 E-08
         2     -      4      2^-23 = 1.192 092 895 507 81 E-07
         4     -      8      2^-22 = 2.384 185 791 015 62 E-07
         8     -     16      2^-21 = 4.768 371 582 031 25 E-07
        16     -     32      2^-20 = 9.536 743 164 062 5  E-07
        32     -     64      2^-19 = 1.907 348 632 812 5  E-06
        64     -    128      2^-18 = 0.000 003 814 697 265 625
       128    -     256      2^-17 = 0.000 007 629 394 531 25
       256    -     512      2^-16 = 0.000 015 258 789 062 5
       512    -   1 024      2^-15 = 0.000 030 517 578 125
     1 024    -   2 048      2^-14 = 0.000 061 035 156 25
     2 048    -   4 096      2^-13 = 0.000 122 070 312 5
     4 096    -   8 192      2^-12 = 0.000 244 140 625
     8 192   -   16 384      2^-11 = 0.000 488 281 25
    16 384   -   32 768      2^-10 = 0.000 976 562 5
    32 768   -   65 536      2^-9  = 0.001 953 125
    65 536   -  131 072      2^-8  = 0.003 906 25
   131 072   -  262 144      2^-7  = 0.007 812 5
   262 144   -  524 288      2^-6  = 0.015 625
   524 288 -  1 048 576      2^-5  = 0.031 25
 1 048 576 -  2 097 152      2^-4  = 0.062 5
 2 097 152 -  4 194 304      2^-3  = 0.125
 4 194 304 -  8 388 608      2^-2  = 0.25
 8 388 608 - 16 777 216      2^-1  = 0.5
16 777 216 - 33 554 432      2^0   = 1

সুতরাং যদি আপনার ইউনিটগুলি মিটার হয় তবে আপনি 16 484 - 32 768 ব্যান্ড (উত্স থেকে প্রায় 16-33 কিমি) এর চারপাশে মিলিমিটার নির্ভুলতা হারাবেন lose

এটি সাধারণত বিশ্বাস করা হয় যে আপনি ভিন্ন বেস ইউনিট ব্যবহার করে এটিকে ঘিরে কাজ করতে পারেন তবে এটি সত্য নয়, কারণ এটি আপেক্ষিক নির্ভুলতার সাথে গুরুত্বপূর্ণ।

  • যদি আমরা আমাদের ইউনিট হিসাবে সেন্টিমিটার ব্যবহার করি তবে আমরা 1 048 576-2 097 152 ব্যান্ডের (মিল থেকে 10-21 কিলোমিটার) মিলিমিটার নির্ভুলতা হারাব

  • যদি আমরা হেক্টামিটারগুলি আমাদের ইউনিট হিসাবে ব্যবহার করি তবে আমরা 128-256 ব্যান্ডের (মিল থেকে 13-26 কিলোমিটার) মিলিমিটার নির্ভুলতা হারাব

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

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

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

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


1
পুনর্নবীকরণ অবশ্যই যাওয়ার উপায়!
ফ্লোরিস

2
স্থির পয়েন্ট স্থানাঙ্ক ব্যবহার সম্পর্কে কী? যদি প্রয়োজন হয় 64 বিট পূর্ণসংখ্যার সাথে?
এপিআই-বিস্ট

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

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

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

3

এটি আপনার পদার্থবিজ্ঞানের স্কেলের উপর নির্ভরশীল বলে উত্তর দেওয়া কঠিন: গ্রহণযোগ্য ন্যূনতম চলাফেরার গতিটি কী যা শূন্যকে গোল করতে হবে না?

আপনার যদি একটি বৃহত বিশ্ব এবং ধারাবাহিক পদার্থবিজ্ঞানের প্রয়োজন হয় তবে একটি নির্দিষ্ট পয়েন্ট ক্লাস ব্যবহার করা আরও ভাল।

উদাহরণস্বরূপ, বিশ্বের যে কোনও জায়গা থেকে কামানের বল গুলি করা আপনাকে একই ফল দেবে এবং bit৪ বিট নির্দিষ্ট পয়েন্ট (৩২.৩২) আপনাকে বেশিরভাগ গেমগুলিতে অনুধাবনযোগ্য কোনও কিছুর চেয়ে অনেক বেশি নির্ভুলতা এবং আরও বেশি কিছু দেয়। যদি আপনার ইউনিটটি 1 মিটার হয় তবে আপনি এখনও 232 পিকোমিটারের সূক্ষ্মতা থেকে 2147483 কিলোমিটার দূরে রয়েছেন।

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

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

এই ক্রিয়াকলাপগুলি সিমডি নির্দেশাবলী এবং পাইপলাইনিংগুলি থেকে এতটা উপকৃত হয় না যা সাধারণত এফপিইউ বিলম্বিত করে hide

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


-3

আপনি এটিকে পুরোপুরি গুণে এড়াতে পারবেন।
ফ্লোটের সাথে কাজ করার পরিবর্তে, কেবল তাদের 10 ^ (x) দিয়ে গুণ করুন, সংরক্ষণ করুন এবং যখন প্রয়োজন হয় আবার 10 ^ (- x) দিয়ে গুণ করুন।
এ থেকে এটি নির্ভর করে আপনি কোন ধরণের ইন্ট ব্যবহার করতে চান।


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

3
তদুপরি, বেস -10 খুব ব্যবহারিক নয়। বিটগুলির পরিপ্রেক্ষিতে আপনি পূর্ণসংখ্যাটি বিভক্ত করার সময় স্থির-পয়েন্ট সংখ্যাগুলি আরও অনেক বেশি ভাল কাজ করে (স্বাক্ষরবিহীন ২.6..6 বিবেচনা করুন - ভগ্নাংশের উপাদানটি নিম্ন 6-বিট ( 1.0 / 64.0 * x & 63) এবং অবিচ্ছেদ্য অংশটি কেবল x >> 6) । দশটি শক্তিতে কিছু বাড়ানোর চেয়ে এটি কার্যকর করা সহজ is
অ্যান্ডন এম। কোলম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.