হাস্কেলের `মোডা এবং` রেম` এর মধ্যে পার্থক্য


130

হাস্কেলের মধ্যে modএবং ঠিক পার্থক্য কী rem?

উভয় একই ফলাফল দেয় বলে মনে হয়

*Main> mod 2 3
2
*Main> rem 2 3
2
*Main> mod 10 5
0
*Main> rem 10 5
0
*Main> mod 1 0
*** Exception: divide by zero
*Main> rem 1 0
*** Exception: divide by zero
*Main> mod 1 (-1)
0
*Main> rem 1 (-1)
0

3
হাস্কেলকে চেনে না, তবে সম্ভবত এটি একই অপারেশন। modulus == remআন্ডার।
ম্যাথু শার্লে

সত্যি কথা বলতে কি, এটি একই প্রশ্ন ছিল না। অন্য প্রশ্নটি এই প্রশ্নের উত্তর বুঝতে অনুধাবন করেছে।
ড্যান বার্টন

@Dan পড়া যে প্রশ্ন, কারণ অন্য প্রশ্নই আমি (ছিল stackoverflow.com/questions/5892188/... /:), আমি একই উপলব্ধি
অস্কার Mederos

2
এটির মধ্যে একই পার্থক্য divএবংquot
নতুনচ্যাক

উত্তর:


181

দ্বিতীয় যুক্তি নেতিবাচক হলে এগুলি একই হয় না:

2 `mod` (-3)  ==  -1
2 `rem` (-3)  ==  2

20
ক্লোজুরে সম্পর্কে remএবং আমার একই প্রশ্ন modছিল এবং এটি উত্তর ছিল।
noahlz

11
প্রথম যুক্তিটি নেতিবাচক হলে না এগুলি একই হয় না। এই ছদ্মবেশী ক্রিয়াকলাপ সম্পর্কে আরও তথ্যের জন্য stackoverflow.com/a/8111203/1535283 এবং stackoverflow.com/a/339823/1535283 দেখুন ।
স্কট ওলসন

4
এছাড়াও স্ট্যাকওভারফ্লো.com/a/6964760/205521 থেকে দেখে মনে হচ্ছে remএটি দ্রুততম।
থমাস আহলে

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

59

হ্যাঁ, এই ফাংশনগুলি ভিন্নভাবে কাজ করে। সরকারী ডকুমেন্টেশন হিসাবে সংজ্ঞায়িত :

quot পূর্ণসংখ্যা বিভাগটি শূন্যের দিকে কাটা হয়

rem পূর্ণসংখ্যার অবশিষ্ট, সন্তুষ্টিজনক:

(x `quot` y)*y + (x `rem` y) == x

div পূর্ণসংখ্যা বিভাগটি নেতিবাচক অসীমের দিকে কাটা হয়

mod পূর্ণসংখ্যা মডুলাস, সন্তুষ্টিজনক:

(x `div` y)*y + (x `mod` y) == x

আপনি যখন দ্বিতীয় প্যারামিটার হিসাবে নেতিবাচক সংখ্যা ব্যবহার করেন এবং ফলাফলটি শূন্য হয় না তখন আপনি সত্যই পার্থক্যটি লক্ষ্য করতে পারেন:

5 `mod` 3 == 2
5 `rem` 3 == 2

5 `mod` (-3) == -1
5 `rem` (-3) == 2

(-5) `mod` 3 == 1
(-5) `rem` 3 == -2

(-5) `mod` (-3) == -2
(-5) `rem` (-3) == -2

 


আপনার শেষ চারটি উদাহরণ সম্ভবত আপনার অর্থটি নয়, যেহেতু modএবং এর remচেয়ে বেশি দৃ strongly়তার সাথে সংযুক্ত (-)। আমি আপনার মন্তব্যটি সম্পাদনা করেছি যেহেতু আমি এই মন্তব্যে মাল্টি লাইন স্টাফ রাখতে পারি না।
এরিক হেসেলিংক

1
@ এরিকহেসেলিংক: আপনি আপনার সম্পাদনার সাথে একটি ত্রুটি প্রবর্তন করেছেন। (-5) `mod` 3 == 1
চেং সান

@ চেংসুন ধন্যবাদ, আমি এটি ঠিক করেছি। পর্যালোচনা পরে লাইভ করা উচিত।
এরিক হেসেলিংক

16

ব্যবহারিকভাবে বলতে:

আপনি কি জানেন উভয় operands ইতিবাচক হন, তাহলে আপনি সাধারণত ব্যবহার করা উচিত quot, remঅথবা quotRemদক্ষতা জন্য।

যদি আপনি না জানেন যে উভয় অপারেশন ইতিবাচক, তবে আপনি ফলাফলগুলি দেখতে কেমন চান তা নিয়ে আপনাকে ভাবতে হবে। আপনি সম্ভবত না চান quotRem, তবে আপনি নাও চান divMod(x `div` y)*y + (x `mod` y) == xআইন একটি খুব ভাল এক, কিন্তু নেতিবাচক অনন্ত (Knuth শৈলী বিভাগ) দিকে বিভাজন rounding প্রায়ই কম দরকারী এবং যে নিশ্চিত কম কার্যকরী 0 <= x `mod` y < y(ইউক্লিডিয় বিভাগ)।


5

আপনি যদি কেবল বিভাজনের জন্য পরীক্ষা করতে চান তবে আপনার সর্বদা ব্যবহার করা উচিত rem

মূলত x `mod` y == 0সমান x `rem` y == 0, তবে এর remচেয়ে দ্রুত mod

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