পাইথনে পূর্ণসংখ্যা বিভাগ এবং ভাসমান থেকে ইন্ট রূপান্তরের মধ্যে পার্থক্যের কারণ কী?


52

আমি সম্প্রতি লক্ষ্য করেছি যে int()0 এর দিকে একটি ভাসাটি গোল করে, যখন পূর্ণসংখ্যা বিভাগ তার মেঝেটির দিকে একটি ফ্লোটকে বৃত্তাকার করে।

এই ক্ষেত্রে:

-7 // 2 = -4
int(-7/2) = -3

আমি ডকুমেন্টেশন পড়েছি যা নির্দিষ্ট করে:

ক্লাস ইনট (এক্স, বেস = 10)

একটি সংখ্যা বা স্ট্রিং এক্স থেকে তৈরি একটি পূর্ণসংখ্য অবজেক্টটি ফেরত দিন, বা কোনও আর্গুমেন্ট> দেওয়া না থাকলে 0 প্রদান করুন। X যদি একটি সংখ্যা হয় তবে এক্স ফিরিয়ে দিন। int ()। ভাসমান পয়েন্ট সংখ্যাগুলির জন্য, এটি শূন্যের দিকে ছাঁটা হয়।

এবং:

মেঝে বিভাগ

গাণিতিক বিভাগ যা নিকটতম পূর্ণসংখ্যার জন্য বৃত্তাকার হয়।মেঝে বিভাগ অপারেটর হয় //। উদাহরণস্বরূপ, 11/4 এক্সপ্রেশনটি 2 এর ভাসমান সত্য বিভাজন দ্বারা ফিরে আসা 2.75 এর বিপরীতে 2 এর মূল্যায়ন করে। দ্রষ্টব্য যে (-11) // 4 হ'ল -3 কারণ এটি নীচের দিকে -2.75 হয়। পিইপি 238 দেখুন।

তবে এটি আমার কাছে অযৌক্তিক বলে মনে হয় যে অনুরূপ 2 টি অপারেশন (ফ্লাট বিভাগ থেকে পূর্ণসংখ্যার) বিভিন্ন ফলাফল ফিরিয়ে আনতে হবে।

কার্যকারিতা মধ্যে পার্থক্য জন্য কোন প্রেরণা আছে?

ধন্যবাদ.


প্রাসঙ্গিক লিঙ্ক: পাইথন- history.blogspot.com/2010/08/…
dan04

উত্তর:


61

সমন্নয়।

এটি বোঝার জন্য আপনাকে কয়েকটি খুব বেসিক এবং আপাতদৃষ্টিতে অপ্রাসঙ্গিক ব্যাখ্যা অনুসরণ করতে হবে।

স্কুলে আপনি বাকী অংশ নিয়ে বিভাগ শিখেছেন। এবং আপনি এইভাবে গণনা করেছেন:

8 ÷ 4 = 2 R 0
7 ÷ 4 = 1 R 3
6 ÷ 4 = 1 R 2
5 ÷ 4 = 1 R 1
4 ÷ 4 = 1 R 0
3 ÷ 4 = 0 R 3
2 ÷ 4 = 0 R 2
1 ÷ 4 = 0 R 1
0 ÷ 4 = 0 R 0
        ^------ This is the result of x // 4
            ^-- This is the result of x % 4 (modulo)

পরে, আপনি প্রকৃত সংখ্যার জন্য বিভাগগুলি শিখেছেন:

8 ÷ 4 = 2.0
7 ÷ 4 = 1.75
6 ÷ 4 = 1.5
5 ÷ 4 = 1.25
4 ÷ 4 = 1.0
3 ÷ 4 = 0.75
2 ÷ 4 = 0.5
1 ÷ 4 = 0.25
0 ÷ 4 = 0.0
        ^--- Note that the number in front of the . is int(x/4)

এই মুহুর্ত পর্যন্ত, আপনি বিশ্বাস করতে পারেন x // 4এবং int(x/4)সর্বদা একই ফলাফল দিতে। পরিস্থিতি সম্পর্কে এটি আপনার বর্তমান উপলব্ধি।

তবে, পূর্ণসংখ্যা বিভাগে কী ঘটে তা একবার দেখুন: আর চক্রের পিছনে সংখ্যা 3, 2, 1 থেকে 0 এবং তারপরে পুনরায় চালু হয়: 3, 2, 1, 0. আর আর এর সামনের সংখ্যাটি প্রতি 4 র্থ পদক্ষেপে হ্রাস পায়।

তো, কীভাবে চলবে?

 8 ÷ 4 =  2 R 0
 7 ÷ 4 =  1 R 3
 6 ÷ 4 =  1 R 2
 5 ÷ 4 =  1 R 1
 4 ÷ 4 =  1 R 0
 3 ÷ 4 =  0 R 3
 2 ÷ 4 =  0 R 2
 1 ÷ 4 =  0 R 1
 0 ÷ 4 =  0 R 0
-1 ÷ 4 = -1 R 3
         ^------ We have to decrease now, because we already have 0 four times
              ^-- We have to restart the cycle at 3

একই সময়ে, আসল নম্বর বিভাগ আমাদের দেয়:

-1 ÷ 4 = -0.25
          ^----- There is still a 0 in front of the .

এজন্যই -1 // 4-1 int(-1/4)দেয় তবে 0 দেয়।

কার্যকারিতা মধ্যে পার্থক্য জন্য কোন প্রেরণা আছে?

ঠিক আছে, তারা বিভিন্ন উদ্দেশ্যে পরিবেশন করে: //অবশিষ্টদের সাথে একটি পূর্ণসংখ্যার গণনার int()অংশ এবং আপনাকে .একটি আসল সংখ্যার ক্রিয়াকলাপের সামনে অংশ দেয় ।

আপনি কী গণনা করতে চান তা স্থির করেন, তারপরে আপনি ঠিক করবেন যে সঠিক ফলাফল পেতে পাইথনে কোন অপারেটরটি ব্যবহার করবেন।

ভাল প্রশ্ন. শেখা চালিয়ে যান।


11
অনুশীলনে, এটি একটি কৌশলটির অনুমতি দেয়: আপনার যদি -1 মিষ্টি থাকে এবং আপনি 4 জন বন্ধুকে দিয়ে দেন তবে 3 টি মিষ্টি বাকি থাকবে। দুর্দান্ত, তাই না? আপনাকে কেবল -1 মিষ্টির মালিকানা কীভাবে তা খুঁজে বের করতে হবে।
টমাস ওয়েলার

1
এটি অজানা //3 তে অপারেটর যুক্ত করার অনুপ্রেরণাটি বুঝতে পেরে এটি কোনও ধরণের ধারাবাহিকতা তৈরি করে যাতে ইনট (ফ্লোট) ব্যবহার বাধ্যতামূলকভাবে এড়াতে পারে। যদি এটি না হয় তবে কখন ব্যবহার করে বাস্তবায়ন করা int()উচিত এবং কখন ব্যবহার করে বাস্তবায়ন করা উচিত//
IsaacDj

1
ঠিক আছে, তবে এটি কেবল একটি ভুল ধারণা। এটি কোনও খারাপ কিছুই নয়, যতক্ষণ না আপনি নির্ভুলতার জন্য আপনার অনুমানগুলি পরীক্ষা করেন, যা সম্ভবত 50% ক্ষেত্রে ব্যর্থ হয় (কমপক্ষে এটি আমার ক্ষেত্রে ঘটে)। আমি উত্তরে এটি সম্পর্কে কিছু শব্দ যুক্ত করেছি।
টমাস ওয়েলার

2
@ আইস্যাকডজে আপনি "ফ্লোর বিভাগ" অপারেটরের পিছনের গল্পটির জন্য এটি পড়তে চাইতে পারেন ।
ব্রুনো desthuilliers

1
@ এরিকলিপার্ট: আমার মনে হয় না এটি উদ্ভট। আমরা ধরে নিতে পারি না যে কোনও ক্ষতিকারক অপারেশন সুনির্দিষ্ট ক্রিয়াকলাপের জন্য একই ফলাফল সরবরাহ করে। কোডে কথা বলা: Math.Floor(3.23) != -Math.Floor(-3.23)একই কারণে -((-x)//y)সমান হওয়ার দরকার নেই x//y
টমাস ওয়েলার

4

আমি বলব যে 2 টি অপারেশনটি স্বজ্ঞাতভাবে একই রকম হওয়া উচিত বলে আপনার পর্যবেক্ষণটি আশা করা যায় যেহেতু ইতিবাচক সংখ্যায় তারা অভিন্ন আচরণ করে। তবে যদি আপনি তাদের উত্সের দিকে তাকান (একটি গণিত থেকে আসে এবং অন্যটি কম্পিউটার বিজ্ঞান থেকে আসে) তবে এটি তাদের পৃথক আচরণকে আরও বোঝায়।

আপনি সেখানে ধারণাগুলির পিছনে দেখতে পারেন:

  • মেঝে বিভাগ ওরফে মেঝে ফাংশন গণিত বিভাগে প্রয়োগ করা হয়
  • রূপান্তর / প্রকারের castালাই টাইপ করুন

================================================== ================

আমি) মেঝে বিভাগ ওরফে মেঝে ফাংশন গণিত বিভাগে প্রয়োগ করা হয়

মেঝে ফাংশন গণিতে একটি খুব প্রতিষ্ঠিত ধারণা।

ম্যাথওয়ার্ল্ড.ওয়াল্ফ্রাম থেকে :

সবচেয়ে বড় পূর্ণসংখ্যা ফাংশন বা পূর্ণসংখ্যা মান (স্প্যানিয়ের এবং ওল্ডহ্যাম 1987) নামে পরিচিত তল ফাংশন | _ x_ |, x এর চেয়ে কম বা সমান বৃহত্তম পূর্ণসংখ্যা দেয়। মেঝে ফাংশনটির জন্য নাম এবং প্রতীক কেই আইভারসন দ্বারা তৈরি করা হয়েছিল (গ্রাহাম এট আল 1994)

সুতরাং মেঝে বিভাগ গণিত বিভাগে প্রয়োগ করা মেঝে ফাংশন ছাড়া আর কিছুই নয়। আচরণটি অত্যন্ত স্পষ্ট, "গাণিতিকভাবে নির্ভুল"।

দ্বিতীয়) রূপান্তর / প্রকারের ingালাই টাইপ করুন

উইকিপিডিয়া থেকে :

কম্পিউটার সায়েন্সে টাইপ রূপান্তর, টাইপ কাস্টিং, টাইপ জবরদস্তি এবং টাইপ জাগলিং একটি এক্সপ্রেশনকে এক ডেটা থেকে অন্য প্রকারে পরিবর্তনের বিভিন্ন উপায়।

বেশিরভাগ প্রোগ্রামিং ভাষায়, কাস্টিং ফর্মটি ফ্লোট টু পূর্ণসংখ্যার প্রয়োগটি বৃত্তাকার নিয়মের মাধ্যমে প্রয়োগ করা হয় (সুতরাং একটি সম্মেলন রয়েছে):

  • 0 এর দিকে রাউন্ড - শূন্যের দিকে গোল করে নির্দেশ করা হয় (কাটা কাটা নামেও পরিচিত)

আইইইই 754 অনুসারে রাউন্ডিং রুল ।


সুতরাং, অন্য কথায়, পাইথনে পূর্ণসংখ্যা বিভাগ এবং ভাসমান থেকে ইন্ট রূপান্তরের মধ্যে পার্থক্যের কারণটি একটি গাণিতিক, এখানে গুয়েডো ভ্যান রসুমের কিছু ধারণা রয়েছে (আমার ধারণা তাকে আমার পরিচয় করিয়ে দিতে হবে না: ডি) (থেকে পাইথন, প্রবন্ধের ইতিহাস ব্লগ "কেন পাইথন এর পূর্ণসংখ্যা বিভাগ মেঝে" )

এটি কিছু লোককে বিরক্ত করে, তবে একটি ভাল গাণিতিক কারণ রয়েছে। পূর্ণসংখ্যা বিভাগ অপারেশন (//) এবং এর ভাইবাল, মডুলো অপারেশন (%), একসাথে চলে যান এবং একটি দুর্দান্ত গাণিতিক সম্পর্ককে সন্তুষ্ট করেন (সমস্ত ভেরিয়েবলগুলি পূর্ণসংখ্যা হয়):

a / b = q এর সাথে বাকি আর

যেমন যে

b * q + r = a এবং 0 <= r <b

(ধরে নিলাম a এবং b হয়> = 0)।

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