মোড (%) কেন অনেক প্রোগ্রামিং ভাষায় মৌলিক গাণিতিক অপারেটর?


17

Aতিহাসিক বা অন্যথায় কোনও কারণ আছে কেন, মডিউলাস অপারেটর বিভিন্ন ভাষার মতো মনে হচ্ছে এমন স্ট্যান্ডার্ড অপারেটরগুলির একটি ছোট সংখ্যার অংশ? ( +, -, *, /এবং %, জাবি এবং সি এর জন্য, **রুবি এবং পাইথন সহ)।

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

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

উত্তর:


20

আমি নিশ্চিত এটা সাধারণ কারণ হল, অনেক CPU- র আর্কিটেকচারের বাস্তবায়ন am modulusপূর্ণসংখ্যা ডিভাইড নির্দেশ একটি দ্বিতীয় আউটপুট।

আমি এটি 1970 এর সিপিইউতে (6800, 8080, জেড 80, 1604, ইত্যাদি) উপস্থিত থাকার কথা মনে করি না, তবে 1980 এর দশকে, इंटেল 8086 এবং 8088, পাশাপাশি মোটরোলা 6809 ছিল।

পিডিপি -11 নির্দেশ আর্কিটেকচারটি DIVশুরু থেকেই (১৯ 1970০) থেকেই একটি ভাগফল এবং একটি অবশিষ্ট উত্পাদন নির্দিষ্ট করে, যদিও এমইউএল এবং ডিআইভির নির্দেশাবলী প্রারম্ভিক ডিজাইনে উপস্থিত ছিল না, তবে একটি "নির্দেশনা বাস্তবায়িত ট্র্যাপ" দ্বারা স্বচ্ছভাবে অনুকরণ করা যায় এবং একটি দিয়ে প্রয়োগ করা হত হ্যান্ডলার যে বিট পাকান। সম্ভবত পিডিপি -11 বৈশিষ্ট্যটি %বৈশিষ্ট্য সরবরাহকারী সি ভাষার প্রথম সংস্করণকে উত্সাহিত করেছিল । (কখনই লক্ষ্য করুন যে কীভাবে শতাংশ চিহ্নের মধ্যে স্ল্যাশ রয়েছে? এটি বিভাগ সম্পর্কিত অপারেটরের জন্য এটি একটি চতুর পছন্দ করে তোলে))

Cএককভাবে মডুলাসের উপস্থিতি সম্ভবত সমস্ত আধুনিক ভাষায় এর উপস্থিতি ব্যাখ্যা করতে পারে। Cবংশধরদের একটি খুব বড় পরিবার আছে এবং অন্যথায় বেশ প্রভাবশালী ছিল।


3
১৯ 1970০ এর দশকের গোড়ার দিক থেকে প্রতিটি অ-এলআইএসপি ভাষায় +1 সি এর প্রভাব অত্যধিক বৃদ্ধি করা যায় না।
রস প্যাটারসন

8

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

আমি স্বাক্ষরিত বিভাগের জন্য হার্ডওয়্যার সহায়তার ইতিহাস জানি না; অনেকগুলি প্রসেসর কয়েক বছর ধরে হার্ডওয়্যার সরবরাহ করে যা স্বাক্ষরিত বিভাজনটি স্বয়ংক্রিয়ভাবে নিয়মের সাপেক্ষে সম্পাদন করতে পারে যে যদি / বি ফলন হয় (কিউ, আর), তবে -a / বি বা একটি /-বি ফলবে (-কিউ, -আর) তবে আমি ব্যবহারের ক্ষেত্রে নিশ্চিত নই যেখানে নিয়মটি ব্যবহার করে বিভাগটি বিশেষভাবে সহায়ক। প্রায় প্রতিটি ক্ষেত্রেই যেখানে আমি নেতিবাচক মানগুলিতে পূর্ণসংখ্যা বিভাগ বা "মডিউলাস" অপারেশন ব্যবহার করেছি, আমি বিভাগে গোল-দিক-নেতিবাচক-অনন্ততা এবং সত্যিকারের মডুলাস অপারেশন চাইছি (যেমন (এ + বি) / বি সর্বদা সমান (a / b) +1 এবং (a + b)% বি সর্বদা একটি% b সমান হবে। অপারেটররা যেভাবে কাজ করে না, তাই লভ্যাংশের সাইনটি পরীক্ষা করতে হবে এবং এটির সময় বিভিন্ন কোড ব্যবহার করা দরকার ' গুলি নেতিবাচক - প্রথম স্থানে সাইনযুক্ত বিভাজন নির্দেশনা থেকে কোনও সুবিধা উপেক্ষা করে। হার্ডওয়্যারে সাইন-ডিভিশন সমর্থনটি আসলে কী কাজে আসে তার জন্য আমি আগ্রহী।

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


3
সেই কারণে, হাস্কেলের দু'জন অপারেটর রয়েছে: remঅবশিষ্ট বিবরণ এবং modআপনার বর্ণিত বৈশিষ্ট্যগুলির সাথে মডুলাস।
ইনগো

@ জটিলতাযুক্তসিবিও: বিশেষত মজার বিষয় হ'ল এটিকে প্রায়শই মডুলাস অপারেটর বলা হয় কারণ এটি সাধারণত মডুলাস গণনা করতে ব্যবহৃত হয়, এমনকি যখন কোডটির মতো প্রয়োজন হয় m = number % base; if (m < 0) m+=base;। আমি জানি না যে আমি কখনও এমন কোনও কোড দেখেছি যা বাকী অপারেটর থেকে নেতিবাচক হয়ে গিয়েছিল, সম্ভবত বাদে q = n/d; if (n%d < 0) q+=1;যা কোনওভাবেই অন্য উপায়ে আরও ভালভাবে লেখা যেতে পারে।
সুপারক্যাট

3

মডুলাস গ্রুপ এবং রিং তত্ত্বের সাথে ঘনিষ্ঠভাবে সম্পর্কিত, যা খুব মৌলিক গাণিতিক তত্ত্বসমূহ।

ক্রম সংযোজন, গুণ, ক্ষয়ক্ষতি, টিট্রেশন (এবং এটি একটি অসীম অনুক্রম) এর তৃতীয় ক্রিয়াকলাপ Exp এটি জটিল সংখ্যার সাথে গুরুত্বপূর্ণ হয়ে ওঠে, যা কম্পিউটার গাণিতিকের ক্ষেত্রে বিরল। একটি নির্দিষ্ট ক্ষয়ক্ষতি স্পষ্টভাবে সমর্থিত, যদিও: 2 এন সাধারণত লেখা হয় 1<<n, কম্পিউটারগুলি বেশ বাইনারি হওয়ার কারণে।

মেঝে এবং ছাদ তুলনায় সত্যিই বিরল: এগুলি কেবল তখনই প্রয়োগ হয় যখন from থেকে ℤ এ রূপান্তরিত হয় ℤ (পূর্ণসংখ্যার দিকে ভাসমান পয়েন্ট)। একইভাবে, absℤ থেকে ℕ থেকে ম্যাপিংয়ের সাথে যুক্ত ℕ


হল পূর্ণসংখ্যা (এবং ℕ হল পূর্ণসংখ্যার একটি উপসেট), আপনার অবশ্যই ℝ থেকে ℤ পর্যন্ত বোঝানো উচিত ℤ
জনি

@ জনি: দুটি উদাহরণ মিশ্র, স্থির।
MSalters

0

দুঃখিত, তবে এটি "কল মাই ব্লাফ" এর গেমে পরিণত করার ঝুঁকিতে আমি মনে করি এই প্রশ্নের আসল উত্তরটি বেশ সহজ is

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

এটি বোঝা গুরুত্বপূর্ণ যে আমরা এই কারণগুলিকে একটি কারণ হিসাবে কম্পিউটার বলেছি। আমাদের সঠিক উত্তর দেওয়ার জন্য আমাদের মাঝে মাঝে তাদের প্রয়োজন হয়!


এই উত্তরটির কোনও অর্থ নেই ... "মোড" ব্যবহার এবং বিভিন্ন ইউনিট ব্যবহারের মধ্যে কী সংযোগ আছে ???
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.