যেহেতু একটি 32 বিট সিস্টেম 2 ^ 33 নম্বর পরিচালনা করতে পারে না (কারণ স্পষ্টত 32-বিট সীমা), তাই 80 বিট ভাসমান পয়েন্ট সংখ্যাটি কীভাবে পরিচালনা করতে পারে ?
এর জন্য "80-বিট" প্রয়োজন ...
যেহেতু একটি 32 বিট সিস্টেম 2 ^ 33 নম্বর পরিচালনা করতে পারে না (কারণ স্পষ্টত 32-বিট সীমা), তাই 80 বিট ভাসমান পয়েন্ট সংখ্যাটি কীভাবে পরিচালনা করতে পারে ?
এর জন্য "80-বিট" প্রয়োজন ...
উত্তর:
32 বিট সিপিইউর একটি অর্থ হ'ল এর রেজিস্টারগুলি 32 বিট প্রশস্ত। এর অর্থ এই নয় যে এটি 64৪ বিট সংখ্যার সাথে ডিল করতে পারে না, কেবল এটি প্রথমে নিম্ন 32 বিট অর্ধেক, তারপরে উপরের 32 বিট অর্ধেক সেকেন্ডের সাথে ডিল করতে হবে। (এ কারণেই সিপিইউগুলির একটি বহন পতাকা রয়েছে )) সিপিইউ একটি বিস্তৃত bit৪ বিট রেজিস্টারে মানগুলি লোড করতে পারলে এটি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কম।
সুতরাং, কোনও সিস্টেমের "বাইটেনস" অগত্যা কোনও প্রোগ্রামের সাথে সংখ্যার আকার সীমাবদ্ধ করে না, কারণ আপনি সর্বদা অপারেশনগুলি ব্রেকআপ করতে পারবেন যা সিপিইউতে নিবন্ধগুলি একাধিক ক্রিয়াকলাপে রেকর্ড করতে পারে না। সুতরাং এটি অপারেশনগুলিকে ধীর করে দেয়, আরও মেমরি গ্রাস করে (যদি আপনাকে "স্ক্র্যাচপ্যাড" হিসাবে মেমরি ব্যবহার করতে হয়) এবং প্রোগ্রাম করা আরও কঠিন হয় তবে অপারেশনগুলি এখনও সম্ভব are
তবে, সিপিইউর ভাসমান পয়েন্ট অংশটির নিজস্ব রেজিস্টার রয়েছে এবং এগুলি 80 বিট প্রস্থের হিসাবে উদাহরণস্বরূপ, ইন্টেল 32 বিট প্রসেসর এবং ভাসমান পয়েন্টের সাথে এটির কোনও বিষয়ই গুরুত্বপূর্ণ নয়। (X86 এর ইতিহাসের প্রথমদিকে, ভাসমান পয়েন্টের ক্ষমতাটি একটি পৃথক চিপ ছিল, এটি সিপিইউতে 80486DX দিয়ে শুরু করে সংহত করা হয়েছিল))
@ ব্রেকথ্রুয়ের উত্তর আমাকে এটি যুক্ত করতে অনুপ্রাণিত করেছে।
ভাসমান পয়েন্টের মানগুলি, ইনফার যেমন এফপিইউ নিবন্ধগুলিতে সঞ্চিত থাকে, বাইনারি পূর্ণসংখ্যার মানগুলির তুলনায় খুব আলাদাভাবে কাজ করে।
ভাসমান বিন্দু মানের ৮০ বিটকে একটি ম্যান্টিসা এবং ঘাঁটিঘটাতে বিভক্ত করা হয় (ভাসমান পয়েন্ট সংখ্যায় "বেস" থাকে যা সর্বদা 2 থাকে)। ম্যান্টিসায় উল্লেখযোগ্য সংখ্যা রয়েছে এবং এক্সপোনেন্টটি নির্ধারণ করে যে এই উল্লেখযোগ্য সংখ্যাগুলি কত বড়। সুতরাং অন্য কোনও রেজিস্টারে কোনও "ওভারফ্লো" নেই, যদি আপনার সংখ্যাটি ম্যান্টিসায় ফিট করার জন্য খুব বেশি হয়ে যায় তবে আপনার ঘনিষ্ঠতা বৃদ্ধি পায় এবং আপনি নির্ভুলতা হারাবেন - যেমন আপনি যখন এটি একটি পূর্ণসংখ্যায় রূপান্তর করেন, আপনি ডানদিকে দশমিক স্থান হারাবেন - এ কারণেই একে বলা হয় ভাসমান বিন্দু।
যদি আপনার ক্ষতিকারকটি খুব বড় হয় তবে আপনার তখন একটি ভাসমান-পয়েন্ট ওভারফ্লো হবে তবে আপনি সহজেই এটি অন্য রেজিস্টারে প্রসারিত করতে পারবেন না কারণ ঘনিষ্ঠ এবং ম্যান্টিসার সাথে একত্রে আবদ্ধ থাকে।
আমি এর কয়েকটি সম্পর্কে ভুল এবং ভুল হতে পারি, তবে আমি বিশ্বাস করি এটিই এর মূল বক্তব্য। (এই উইকিপিডিয়া নিবন্ধটি উপরেরটিকে আরও কিছুটা সংক্ষেপে চিত্রিত করে rates)
এটি ঠিক আছে যে এটি সম্পূর্ণ আলাদাভাবে কাজ করে যেহেতু সিপিইউর পুরো "ভাসমান পয়েন্ট" অংশটি তার নিজস্ব বিশ্বে সাজানো - আপনি এটিতে এবং এ জাতীয় ব্যবহারের জন্য বিশেষ সিপিইউ নির্দেশাবলী ব্যবহার করেন। এছাড়াও, প্রশ্নের মূল বিষয়টির দিকে, কারণ এটি পৃথক, এফপিইউর বুনিয়াদি নেটিভ সিপিইউ-এর স্বতন্ত্রতার সাথে শক্তভাবে মিলিত হয় না।
-fomit-frame-pointer
সেই নিবন্ধটি ফিরে পেতে ব্যবহার করতে পারেন ।
32-বিট, 64-বিট, এবং 128-বিট সমস্ত প্রসেসরের শব্দের দৈর্ঘ্যের উল্লেখ করে, যা "মৌলিক ডেটা টাইপ" হিসাবে ভাবা যেতে পারে। প্রায়শই এটি সিস্টেমের র্যামে / থেকে স্থানান্তরিত বিটের সংখ্যা এবং পয়েন্টারগুলির প্রস্থ (যদিও কোনও কিছুই আপনাকে আরও র্যাম অ্যাক্সেস করতে সফ্টওয়্যার ব্যবহার করতে বাধা দেয় না তবে কোনও একক পয়েন্টার কী অ্যাক্সেস করতে পারে)।
ধ্রুবক ঘড়ির গতি (যেমন আর্কিটেকচারের সমস্ত কিছু ধ্রুবক হিসাবে ধরে নেওয়া) ধরে নেওয়া এবং ধরে নেওয়া মেমরির পাঠ্য / লেখাগুলি একই গতি হয় (আমরা এখানে 1 টি ঘড়ি চক্র ধরেছি তবে এটি বাস্তব জীবনের ক্ষেত্রে থেকে অনেক দূরে), আপনি পারেন clock৪-বিট মেশিনে একটি ঘড়ি চক্রের দুটি two৪-বিট নম্বর যুক্ত করুন (তিনটি যদি আপনি র্যাম থেকে নম্বর আনতে গণনা করেন):
ADDA [NUM1], [NUM2]
STAA [RESULT]
আমরা 32-বিট মেশিনেও একই গণনাটি করতে পারি ... তবে, 32-বিট মেশিনে, আমাদের সফ্টওয়্যারটিতে এটি করা দরকার, যেহেতু নীচের 32-বিটগুলি প্রথমে যুক্ত করা উচিত, ওভারফ্লোয়ের জন্য ক্ষতিপূরণ দিন, তারপরে যুক্ত করুন উপরের -৪ বিট:
ADDA [NUM1_LOWER], [NUM2_LOWER]
STAA [RESULT_LOWER]
CLRA ; I'm assuming the condition flags are not modified by this.
BRNO CMPS ; Branch to CMPS if there was no overflow.
ADDA #1 ; If there was overflow, compensate the value of A.
CMPS ADDA [NUM1_UPPER], [NUM2_UPPER]
STAA [RESULT_UPPER]
আমার তৈরি আপ অ্যাসেমবিলিটি সিনট্যাক্সের মধ্য দিয়ে যাচ্ছেন, আপনি সহজেই দেখতে পাবেন যে উচ্চতর নির্ভুলতা অপারেশনগুলি কীভাবে একটি নিম্ন শব্দের দৈর্ঘ্যের মেশিনে তাত্পর্যপূর্ণভাবে আরও বেশি সময় নিতে পারে। এটি 64-বিট এবং 128-বিট প্রসেসরের আসল চাবি: তারা আমাদের একক ক্রিয়াকলাপে বিট সংখ্যক বিট পরিচালনা করতে দেয়। কিছু মেশিনে ক্যারি সহ অন্যান্য পরিমাণ যুক্ত করার জন্য নির্দেশাবলী অন্তর্ভুক্ত করা হয় (উদাহরণস্বরূপ ADC
x86 এ) তবে উপরের উদাহরণটিতে নির্বিচারে যথার্থ মানগুলি মনে রাখা হয়।
এখন, এই প্রশ্নের প্রসারিত করার জন্য, আমরা কীভাবে আমাদের উপলব্ধ রেজিস্টারগুলির চেয়ে বৃহত্তর সংখ্যা যুক্ত করতে পারি তা দেখতে সহজ - আমরা কেবল সমস্যাটিকে রেজিস্টরের আকারকে ভেঙে ফেলেছি এবং সেখান থেকে কাজ করব। যদিও @ মাত্তিও ইটালিয়া দ্বারা উল্লিখিত হয়েছে , x87 এফপিইউ স্ট্যাকের 80-বিট পরিমাণের জন্য স্থানীয় সমর্থন রয়েছে, সিস্টেমগুলিতে এই সমর্থনটির অভাব রয়েছে (বা প্রসেসরগুলি সম্পূর্ণরূপে একটি ভাসমান পয়েন্ট ইউনিট অভাবী নয়!), সমতুল্য গণনা / ক্রিয়াকলাপ অবশ্যই সফ্টওয়্যারেই করা উচিত ।
সুতরাং একটি ৮০-বিট সংখ্যার জন্য, প্রতিটি ৩২-বিট সেগমেন্ট যুক্ত করার পরে, কেউ ৮১-বিট বিটের মধ্যে ওভারফ্লো পরীক্ষা করতে পারে এবং optionচ্ছিকভাবে উচ্চতর অর্ডার বিটগুলি শূন্য করে। এই চেক / জিরোগুলি নির্দিষ্ট x86 এবং x86-64 নির্দেশাবলীর জন্য স্বয়ংক্রিয়ভাবে সঞ্চালিত হয়, যেখানে উত্স এবং গন্তব্য অপারেন্ড আকারগুলি নির্দিষ্ট করা হয়েছে (যদিও এগুলি কেবল 1 বাইট প্রশস্ত থেকে শুরু করে 2 এর শক্তিতে নির্দিষ্ট করা হয়)।
অবশ্যই, ভাসমান পয়েন্ট সংখ্যাগুলির সাথে, ম্যান্টিসা এবং উল্লেখযোগ্য অঙ্কগুলি অফসেট আকারে একত্রে প্যাক করা হওয়ায় কেউ কেবল বাইনারি সংযোজন করতে পারে না। X86 প্রসেসরের ALU- তে, আইইইই 32-বিট এবং 64-বিট ফ্লোটগুলির জন্য এটি সম্পাদন করার জন্য একটি হার্ডওয়্যার সার্কিট রয়েছে; তবে , এমনকি ফ্লোটিং-পয়েন্ট ইউনিট (এফপিইউ) এর অভাবে একই গণনা সফ্টওয়্যারে করা যেতে পারে (যেমন, জিএনইউ সায়েন্টিফিক লাইব্রেরি ব্যবহারের মাধ্যমে , যা একটি এফপিইউ ব্যবহার করে যখন আর্কিটেকচারের সাথে সংকলন করা হয়, সফ্টওয়্যার অ্যালগরিদমে ফিরে যেতে পারে) যদি কোনও ভাসমান-পয়েন্ট হার্ডওয়্যার উপলভ্য না হয় [যেমন এমপিডেড মাইক্রোকন্ট্রোলারের জন্য এফপিইউ নেই)।
পর্যাপ্ত মেমরি দেওয়া, এক এছাড়াও সংখ্যা উপর কম্পিউটেশন সম্পাদন করতে পারবেন অবাধ (বা "অসীম" - বাস্তবানুগ সীমার মধ্যে) স্পষ্টতা, আরো মেমরি ব্যবহার করে আরো স্পষ্টতা যেমন প্রয়োজন হয়। এটির একটি বাস্তবায়ন জিএনইউ মাল্টিপল যথার্থ লাইব্রেরিতে উপস্থিত রয়েছে , পূর্ণসংখ্যার, যৌক্তিক এবং ভাসমান পয়েন্ট অপারেশনগুলিতে সীমাহীন নির্ভুলতা (অবশ্যই আপনার র্যাম পূর্ণ না হওয়া অবধি) অনুমতি দেয়।
সিস্টেমের মেমরি আর্কিটেকচার আপনাকে একবারে একবারে 32 বিট স্থানান্তর করতে দেয় - তবে এটি বৃহত্তর সংখ্যা ব্যবহার করা থেকে বিরত থাকে না।
গুণনের কথা ভাবুন। আপনি 10x10 অবধি আপনার গুণক টেবিলগুলি জানেন, তবুও সম্ভবত আপনার কোনও কাগজের টুকরোতে 123x321 সম্পাদন করতে কোনও সমস্যা নেই: আপনি কেবল এটিকে অনেকগুলি ছোট ছোট সমস্যায় বিভক্ত করেন, স্বতন্ত্র অঙ্কগুলি গুণিত করে এবং বহন যত্ন নেওয়া ইত্যাদি
প্রসেসর একই জিনিস করতে পারেন। "পুরানো দিনগুলিতে" আপনার কাছে 8 টি বিট প্রসেসর ছিল যা ভাসমান পয়েন্ট গণিত করতে পারে। তবে তারা স্লুওউও ছিল।
"32-বিট" প্রকৃতপক্ষে প্রসেসরের শ্রেণিবদ্ধ করার একটি উপায়, সেট-ইন-স্টোন রুলিং নয়। একটি "32-বিট" প্রসেসরের সাথে কাজ করার জন্য 32 বিট সাধারণ উদ্দেশ্যে নিবন্ধগুলি থাকে isters
যাইহোক, প্রসেসরের সমস্ত কিছু 32-বিট-এ সম্পন্ন করা উচিত পাথরের প্রয়োজনীয়তার কোনও সেট নেই। উদাহরণস্বরূপ, একটি "32-বিট" কম্পিউটারের জন্য 28-বিট অ্যাড্রেস বাস থাকা শোনা যায় নি, কারণ এটি হার্ডওয়্যারটি তৈরি করা সস্তা ছিল। -৪-বিট কম্পিউটারগুলিতে প্রায়শই একই কারণে একটি 40-বিট বা 48-বিট মেমরি বাস থাকে।
ভাসমান পয়েন্ট গণিত হ'ল এমন একটি জায়গা যেখানে আকারগুলি পৃথক হয়। অনেকগুলি 32-বিট প্রসেসর 64-বিট ভাসমান পয়েন্ট সংখ্যা সমর্থন করে। তারা সাধারণ উদ্দেশ্যে নিবন্ধকের চেয়ে বিস্তৃত বিশেষ রেজিস্টারে ভাসমান পয়েন্টের মানগুলি সংরক্ষণ করে তা করে। বিশেষ রেজিস্টারগুলিতে এই বৃহত ভাসমান পয়েন্ট সংখ্যাগুলির মধ্যে একটি সংরক্ষণ করার জন্য, প্রথমে দুটিটি সাধারণ উদ্দেশ্যে রেজিস্টারগুলিতে নম্বরটি ভাগ করে নেওয়া হবে, তারপরে তাদেরকে বিশেষ রেজিস্টারে একটি ফ্লোটে সংযুক্ত করার জন্য একটি নির্দেশনা জারি করা হবে। একবার এই ভাসমান পয়েন্ট রেজিস্টারগুলিতে, মানগুলি 32-বিট অর্ধেকের জুটির পরিবর্তে 64-বিট ফ্লোট হিসাবে হেরফের হবে।
আপনি যে 80-বিট পাটিগণিত উল্লেখ করেছেন এটি এটির একটি বিশেষ ঘটনা। আপনি যদি ভাসমান পয়েন্ট সংখ্যাগুলির সাথে কাজ করে থাকেন তবে আপনি ভাসমান পয়েন্ট বন্ধ ইস্যু থেকে উত্থাপিত অবোধের সাথে পরিচিত familiar রাউন্ডঅফের জন্য একটি সমাধান হ'ল আরও বিটস যথাযথতা থাকা দরকার, তবে তারপরে আপনাকে আরও বড় সংখ্যা সঞ্চয় করতে হবে, এবং বিকাশকারীদের মেমরিতে অস্বাভাবিকভাবে বড় ভাসমান পয়েন্ট মান ব্যবহার করতে বাধ্য করতে হবে।
ইন্টেল সমাধানটি হ'ল ভাসমান পয়েন্ট রেজিস্টারগুলিতে সমস্ত 80 বিট হয় তবে সেই নিবন্ধগুলিতে / থেকে মানগুলি সরানোর নির্দেশাবলী প্রাথমিকভাবে 64-বিট সংখ্যা সহ কাজ করে। যতক্ষণ আপনি ইন্টেলের এক্স ৮87৮ ফ্লোটিং পয়েন্ট স্ট্যাকের মধ্যে পুরোপুরি পরিচালনা করেন, আপনার সমস্ত অপারেশন 80 বিট নির্ভুলতার সাথে সম্পন্ন হয়। যদি আপনার কোডটিকে ভাসমান পয়েন্ট নিবন্ধগুলির মধ্যে সেই মানগুলির মধ্যে একটি টানতে এবং এটি কোথাও সঞ্চয় করতে হয় তবে এটি এটিকে 64-বিট করে কেটে দেয়।
গল্পের নৈতিকতা: "32-বিট" এর মতো শ্রেণীবদ্ধকরণগুলি আপনি যখন বিষয়গুলিতে আরও গভীর হন তখন সর্বদা ঝুঁকিপূর্ণ হয়!
একটি "32-বিট" সিপিইউ হ'ল যেখানে বেশিরভাগ ডেটা রেজিস্টারগুলি 32-বিট রেজিস্টার হয় এবং বেশিরভাগ নির্দেশাবলী সেই 32-বিট রেজিস্টারে ডেটা ব্যবহার করে। একটি 32-বিট সিপিইউ একবারে মেমরি 32-বিট থেকে ডেটা স্থানান্তর করতে পারে to বেশিরভাগ রেজিস্টারগুলি 32-বিট হওয়ার অর্থ এই নয় যে সমস্ত রেজিস্টারগুলি 32-বিট হয়। সংক্ষিপ্ত উত্তরটি হ'ল একটি 32-বিট সিপিইউতে এমন কিছু বৈশিষ্ট্য থাকতে পারে যা অন্যান্য বিটক্টগুলি ব্যবহার করে, যেমন 80-বিট ভাসমান পয়েন্ট রেজিস্টার এবং সংশ্লিষ্ট নির্দেশাবলী।
@ স্পডোন যেমন @ আল্ট্রাসওয়াব্লাইডের উত্তরে একটি মন্তব্যে বলেছিলেন, ইন্টিগ্রেটেড ফ্লোটিং-পয়েন্ট অপারেশনগুলি চালিত প্রথম x86 সিপিইউটি ছিল ইনটেল আই 486 (বিশেষত 80486 ডিএক্স নয় তবে 80486 এসএক্স), যা আই 486 মাইক্রোপ্রসেসর প্রোগ্রামারগুলির পৃষ্ঠা 15-1 অনুসারে রেফারেন্স ম্যানুয়াল , এর সংখ্যাসূচক নিবন্ধগুলিতে "আটটি স্বতন্ত্র-ঠিকানাযোগ্য 80-বিট সংখ্যাসূচক নিবন্ধসমূহ" অন্তর্ভুক্ত করে। আই 486-এ 32-বিট মেমরি বাস রয়েছে, সুতরাং 80-বিট মান স্থানান্তর করতে 3 মেমরি অপারেশন লাগবে।
486 প্রজন্মের পূর্বসূরীর i386 এর কোনও সংহত ভাসমান-পয়েন্ট অপারেশন নেই। পরিবর্তে, এটি একটি বহিরাগত ভাসমান বিন্দু "কোপ্রোসেসর", 80387 ব্যবহার করার জন্য সমর্থন পেয়েছিল This এই কপ্রোসেসরের প্রায় একই কার্যকারিতা ছিল যা আই 486 তে সংহত হয়েছিল, আপনি 80387 প্রোগ্রামার রেফারেন্স ম্যানুয়ালটির পৃষ্ঠা 2-1 থেকে দেখতে পারেন ।
৮০-বিট ভাসমান পয়েন্ট ফর্ম্যাটটি ৮০ 8087 এবং ৮০৮৮ এর জন্য গণিতের কপো প্রসেসরের সাথে উদ্ভূত বলে মনে হয়েছে 80 ৮০86 এবং ৮০৮ 16 ছিল ১-বিট সিপিইউ (১ 16-বিট এবং ৮-বিট মেমরি বাস সহ), এবং এখনও সক্ষম ছিল কপ্রোসেসরে 80 বিট রেজিস্টারগুলির সুবিধা গ্রহণ করে 80 বিট ফ্লোটিং পয়েন্ট ফর্ম্যাট ব্যবহার করতে।