পূর্ণসংখ্যা বিভাগের আচরণ কী?


209

উদাহরণ স্বরূপ,

int result;

result = 125/100;

অথবা

result = 43/100;

ফলাফল কি সর্বদা বিভাগের মেঝেতে থাকবে? সংজ্ঞায়িত আচরণ কী?


5
সংক্ষিপ্তসার: স্বাক্ষরিত পূর্ণসংখ্যা বিভাগ শূন্যের দিকে ছাঁটা হয় । অ-নেতিবাচক ফলাফলের জন্য, এটি মেঝে হিসাবে একই (গোলাকার -Infinity দিকে)। (সাবধান হন যে সি 89 এর গ্যারান্টি দেয় না, উত্তরগুলি দেখুন))
পিটার কর্ডেস

5
প্রত্যেকে "শূন্যের দিকে ছাঁটা" বা কোডের মতো "সিলিং" বা "মেঝে" বলে চলেছে কোন কৌশলটি ব্যবহার করতে হবে সে সম্পর্কে একটি ইচ্ছাকৃত সিদ্ধান্ত নিচ্ছে। কোডটি যদি কথা বলতে পারে তবে তা বলবে"I just throw the dam fraction part in the trash and move on with life"
তীমথিয় এলজে স্টুয়ার্ট

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

1
@ ১৩ স্টিঞ্জ আমি যে মন্তব্যগুলিকে "শূন্যের দিকে ছাঁটাই করছি ... তা তল নয় ... এর নেতিবাচক সিলিং যদি না হয় ... তবে কখনও কখনও প্রযুক্তিগুলি মানুষের স্মৃতিতে ভবিষ্যতে প্রচার করে না এমন মন্তব্যগুলিতে আমি কথোপকথনে কথা বলছি। যেমন আমরা ইচ্ছুক, তবে স্বজ্ঞাতভাবে জেনে রাখা যে "ভগ্নাংশের অংশটি নিক্ষেপ করা হয়েছে" আপনি প্রযুক্তিগত পয়েন্টগুলি অর্জন করতে পারেন। প্রযুক্তিবিদাগুলি একটি ভারী বোঝা, তবে স্বজ্ঞানতা হালকা এবং বাতাসের মতো সতেজকরূপে, আমি এগুলি বহুদূর পর্যন্ত বহন করব এবং যখন প্রয়োজন হবে তখন আমি জানি কোথায় শুরু করব। আপনি যে কাগজটি সংযুক্ত করেছেন, তার মতো, আপনাকে ধন্যবাদ।
টিমোথি এলজে স্টুয়ার্ট

আমি এখানে ইউক্লিডিয়ান বিভাগের উপর জোর দিয়ে উত্তর দিয়েছি (পূর্ণসংখ্যা বিভাগ এবং মডুলাস অপারেটরের মধ্যে আন্ত-খেলা)।
পিকাউড ভিনসেন্ট

উত্তর:


182

ফলাফল কি সর্বদা বিভাগের মেঝেতে থাকবে? সংজ্ঞায়িত আচরণ কী?

হ্যাঁ, দুটি অপারেন্ডের পূর্ণসংখ্যার যোগফল।

.5.৫.৫ গুণক অপারেটর

6 ইন্টিজারের ভাগ করা হয়, / অপারেটরের ফলাফল বাতিল কোনো ভগ্ন অংশ দিয়ে বীজগাণিতিক ভাগফল হয়। ৮৮) ভাগফল a / b উপস্থাপনযোগ্য হলে, এক্সপ্রেশন (a / b) * b + a% b এর সমান হবে।

এবং সম্পর্কিত পাদটীকা:

৮৮) এটিকে প্রায়শই '' শূন্যের দিকে ছাঁটাই '' বলা হয়।

অবশ্যই দুটি বিষয় উল্লেখযোগ্য:

3 সাধারণ গাণিতিক রূপান্তরগুলি অপারেন্ডগুলিতে সঞ্চালিত হয়।

এবং:

5 / অপারেটরের ফলাফলটি দ্বিতীয় দ্বারা প্রথম অপারেন্ডের বিভাগ থেকে ভাগফল হয়; % অপারেটরের ফলাফল বাকী। উভয় ক্রিয়াকলাপে, দ্বিতীয় অপারেন্ডের মান শূন্য হলে, আচরণটি সংজ্ঞায়িত।

[দ্রষ্টব্য: জোর আমার]


26
... যদি না আপনি অবশ্যই একটি নেতিবাচক সংখ্যাটিকে ধনাত্মক (বা ভিভি) দ্বারা ভাগ করছেন, সেক্ষেত্রে এটি সিলিং হবে।
হবে যারা একটি

74
এটি তল বা ছাদ নয়, এটি ভগ্নাংশের অংশকে কাটা, ধারণাটি ভিন্ন!
লর্নোভা

38
@ উইল এ: না It এটি শূন্যের দিকে কাটা হিসাবে সংজ্ঞায়িত করা হয়েছে। এটিকে অন্য কোনও কিছু বললে বিভ্রান্তি আরও বাড়বে তাই দয়া করে এটি থেকে বিরত থাকুন।
মার্টিন ইয়র্ক

44
কমপক্ষে গাণিতিক দৃষ্টিকোণ থেকে শূন্যের দিকে ছাঁটাই "যদি> 0 তবে তল অন্য সিলিংয়ের সমতুল্য" equivalent আমি মনে করি একে একে ছাঁটাই বলা তল / সিলিংয়ের চেয়ে সহজ, তবে এটি বৈধ। নির্বিশেষে, উইল এ এর ​​বক্তব্য বৈধ: ডারকজেন্টির উত্তর আংশিকভাবে ভুল, যেহেতু তিনি বলেছিলেন যে বিভাগটির তল হওয়ার ফল সম্পর্কে ওপি ঠিকই সঠিক।
ব্রায়ান

9
@ ফিলিপ পটার: আমি মনে করি না এটি সি ৯৯-এ সংজ্ঞায়িত হয়েছিল, এবং এটি 1998-এর সি ++ স্ট্যান্ডার্ডে নেই। এর মধ্যে অবশ্যই (a / b) * b + a % b == aসন্তুষ্ট থাকতে হয়েছিল, এবং এর নিরঙ্কুশ মানটি a % bকম হওয়া উচিত a, তবে তা a % bনেতিবাচক aবা নেতিবাচক ছিল কিনা bতা নির্দিষ্ট করা হয়নি।
ডেভিড থর্নলি

39

ডির্কজেন্টিয়ালি সি 99 এ পূর্ণসংখ্যা বিভাগের একটি দুর্দান্ত বিবরণ দেয় , তবে আপনার এটিও জানা উচিত যে 89ণাত্মক অপারেন্ড সহ সি 89 এর পূর্ণসংখ্যা বিভাগের একটি বাস্তবায়ন-সংজ্ঞায়িত দিক রয়েছে।

এএনএসআই সি খসড়া (3.3.5) থেকে:

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

সুতরাং আপনি যখন C89 সংকলকটির সাথে আটকে থাকেন তখন নেতিবাচক সংখ্যাগুলি সহ নজর রাখুন।

এটি একটি মজার সত্য যে C99 শূন্যের দিকে কাটছাঁটি বেছে নিয়েছে কারণ এটি ফোরট্রান এটি করেছিল। দেখুন এই বার্তাটি comp.std.c. উপর


2
এবং সি 99 খসড়া এন 1256 ফোরওয়ার্ড অনুচ্ছেদে 5 reliable integer divisionএকটি নতুন ভাষার বৈশিষ্ট্য হিসাবে উল্লেখ করেছে । বিস্ময়কর *-*
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

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

2
@ পিটারকর্ডস: বেশিরভাগ সাধারণ সিপিইউ হার্ডওয়্যার বেশিরভাগ স্থির দ্বারা কক্ষ বিভাজন করতে পারার চেয়ে দ্রুত তল বিভাগ করতে পারে। এই প্রোগ্রামটিতে, এটা ভাল পারতাম স্ট্যান্ডার্ড যে বলার জন্য expr1 / expr2এবং expr1 % expr2যখন উভয় স্থানেই একে অপরের সঙ্গে সামঞ্জস্যপূর্ণ হতে হবে expr1একই ভাবে একই বস্তু একত্রিত করা, এবং জন্য একইভাবে expr2কিন্তু ধরাশায়ী বিভাজন বনাম ছিন্ন পছন্দমত অন্যথায় অনির্দিষ্ট হয়। এটি খুব সামঞ্জস্যতা না ভেঙে আরও দক্ষ কোড জেনারেশনের অনুমতি দিত (এবং বাস্তবায়নগুলি যদি
ঝুঁকির সাথে

23

ফলাফলটি নেতিবাচক যেখানে, সি ফ্লোরিংয়ের পরিবর্তে 0 এর দিকে ছাড়ে - পাইথন পূর্ণসংখ্যা বিভাগটি কেন এখানে সর্বদা মেলে তা সম্পর্কে আমি এই পড়াটি শিখেছি: পাইথনের পূর্ণসংখ্যা বিভাগ কেন মেঝে


3
আমি (নেগ% পোজ) নেতিবাচক হওয়া কি কখনও কার্যকর হয় কিনা তা ভেবে মন্তব্যে একমত? সম্পর্কিত নোটটিতে, আমি অবাক হয়েছি যে "স্বাক্ষরবিহীন> স্বাক্ষরিত" এর কিছু ক্ষেত্রে প্রয়োজনীয় গাণিতিকভাবে-ভুল আচরণটি কি দরকারী? আমি সর্বদা সঠিক আচরণের প্রয়োজন হয় না এর যুক্তিটি বুঝতে পারি; আমি ভুল আচরণের প্রয়োজনের কোনও যুক্তি দেখছি না।
ক্যাট

8
কেন মেঝে বিভাগের সঠিক তরফ থেকে মেঝে সঠিক আচরণ (সি এর সংজ্ঞার বিপরীতে, যা ভাঙা এবং প্রায় কখনও কার্যকর নয়) একটি দুর্দান্ত রেফারেন্সের জন্য +1।
আর .. গিটিহাব থামিয়ে দিচ্ছেন সহায়তা আইসিসি

@ সুপের্যাট বিবেচনা করুন:, এর filtered = (k - 1) * filtered + value + carry; carry = filtered % factor; filtered /= factorপরিবর্তিত মানগুলির সাথে পুনরাবৃত্তি value। এটি সময় ধ্রুবক সহ প্রথম অর্ডার লোপাস ফিল্টারের সাথে একটি সুন্দর পূর্ণসংখ্যার সমানকরণ করে k... তবে বিভাগটি কেটে ফেলা হয় এবং carryনেতিবাচক মানগুলি পাওয়া গেলে এটি কেবলমাত্র প্রতিসম হয় । বিভাগের জন্য উভয় আচরণ সময়ে সময়ে কার্যকর হয়।
hobbs

1
@ হোবস: আমি মনে করি না যে সিগন্যালগুলি শূন্যকে ছাড়িয়ে গেলে উপরের কোডটি পরিষ্কার আচরণ করবে। যদি divমেঝে বিভাজন অপারেটর হয় এবং factorবিজোড় হয় তবে filtered += (filter+(factor div 2)) div factorসমস্ত মান পর্যন্ত পরিষ্কার এবং প্রতিসম আচরণ পাওয়া যাবে INT_MAX-(factor div 2)
সুপারক্যাট

@ সুপারকার্ট এটি কাজ করে যদিও; এই কোডটি এমন কিছু থেকে সামান্য ডিস্টিল করা হয় যা আমি কিছুক্ষণের জন্য একটি পারমাণবিক ঘড়ির নিয়ামকটিতে চালিত ছিলাম।
hobbs

21

হ্যাঁ, ফলাফল সর্বদা শূন্যের দিকে ছাঁটা হয়। এটি ক্ষুদ্রতম পরম মানের দিকে গোল হবে towards

-5 / 2 = -2
 5 / 2 =  2

স্বাক্ষরবিহীন এবং অ-নেতিবাচক স্বাক্ষরিত মানগুলির জন্য, এটি মেঝে হিসাবে সমান (ইনফিনিটির দিকে বৃত্তাকার)।


43
ছাঁটাই, মেঝে নয়
dan04

9
@ ডান04: হ্যাঁ মেঝেটি ইতিবাচক পূর্ণসংখ্যার জন্যই বৈধ হবে :)
লিওনিড

13

ফলাফল কি সর্বদা বিভাগের মেঝেতে থাকবে?

না। ফলাফল পরিবর্তিত হয়, তবে প্রকরণটি কেবল নেতিবাচক মানের জন্য ঘটে।

সংজ্ঞায়িত আচরণ কী?

এটি পরিষ্কার floorণাত্মক অনন্তের দিকে তল রাউন্ডগুলি তৈরি করার জন্য, যখন শূন্যের দিকে পূর্ণসংখ্যা বিভাগের বৃত্তাকার (কাটা)

ইতিবাচক মানগুলির জন্য তারা একই

int integerDivisionResultPositive= 125/100;//= 1
double flooringResultPositive= floor(125.0/100.0);//=1.0

নেতিবাচক মানের জন্য এটি পৃথক

int integerDivisionResultNegative= -125/100;//=-1
double flooringResultNegative= floor(-125.0/100.0);//=-2.0

0

আমি জানি লোকেরা আপনার প্রশ্নের উত্তর দিয়েছে তবে সাধারণ লোকের ভাষায়:

5 / 2 = 2 // যেহেতু 5 এবং 2 উভয়ই পূর্ণসংখ্যার এবং পূর্ণসংখ্যা বিভাগ সর্বদা দশমিককে ছিন্ন করে

5.0 / 2 or 5 / 2.0 or 5.0 /2.0 = 2.5 // এখানে হয় 5 বা 2 বা উভয়ই দশমিক রয়েছে তাই আপনি যে ভাগফলটি পাবেন তা দশমিক হবে।

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