একটি সংখ্যা বাশ শেল ভেরিয়েবলের সর্বোচ্চ মান কত?


17

আমি জানতে আগ্রহী যে বাশ-এ যখন একটি সংখ্যার পরিবর্তনশীল এটি উদ্দেশ্যমূলকভাবে বন্ধ না করেই বাড়ানো হয় তখন কী হয়। সংখ্যাটি কত বড় হতে পারে? এটি কি উপচে পড়বে এবং নেতিবাচক হয়ে উঠবে এবং কেবল চিরকালের জন্য বৃদ্ধি অব্যাহত রাখবে? এটি কি বিরতি দিয়ে কোনও সময়ে থামবে?

আমি একটি x86_64 এএমডি প্রসেসর ব্যবহার করছি, তবে আমি 32 বিট উত্তরগুলিও শুনে খুশি হব, কেবল আপনি কী সম্পর্কে কথা বলছেন তা নির্দিষ্ট করুন। আমি ফেডোরা21 64 বিট চালাচ্ছি।

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


3
স্টার্টার হিসাবে 2 এর কতগুলি ক্ষমতা মুদ্রণের বিষয়ে:for i in {0..70}; do echo 2 to the power of $i = $((2**i)); done
এমপি

1
আপনি যদি বড় সংখ্যা চান, আপনি সম্ভবত kshbashksh -c 'echo $((2**1023))'8.98846567431157954e+307
এটিতে

আমি স্ট্র্যাটোস্ফিয়ারে যদি ভাসমান পয়েন্ট বা মানগুলির প্রয়োজন হয় তবে আমি ksh মনে রাখব, ভাসমান পয়েন্টটি বেশ কার্যকর হতে পারে। তবে এই প্রশ্নটি কেবল তাই যাতে আমি আমার সিস্টেমের সীমাগুলি জানি, এটি এর কারণ নয় যে আমার এর সীমাটি অতিক্রম করতে হবে। এমপির পরামর্শ অনুসারে আমি এমন কিছু করব যা আমি শুরু করিনি কারণ আমি কোনও সিস্টেম ক্রাশের ঝুঁকি নিতে চাইনি।
সর্বোচ্চ পাওয়ার

উত্তর:


22

এটি আপনার বাশ, আপনার ওএস এবং আপনার সিপিইউ আর্কিটেকচারের সংস্করণে নেমে আসতে পারে। আপনি নিজে চেষ্টা করেন না কেন? (2 ^ 31) -1 এ একটি পরিবর্তনশীল সেট করুন, তারপরে এটি বৃদ্ধি করুন, এটি 2 ^ 32 এ সেট করুন, তারপরে এটি বৃদ্ধি করুন, এটি 2 ^ 64 এ সেট করুন, তারপরে এটি বৃদ্ধি করুন ইত্যাদি etc.

এখানে, আমি কেবল নিজের কোর আই 7 ম্যাকটি ওএস এক্স "এল ক্যাপিটান" ভি 10.11.3 চালিত করে দেখেছি এবং দেখে মনে হচ্ছে বাশ স্বাক্ষরিত 64৪-বিট পূর্ণসংখ্যা ব্যবহার করছে।

$ uname -a
ডারউইন স্পিফ.লোকাল 15.3.0 ডারউইন কার্নেল সংস্করণ 15.3.0: থু ডিসেম্বর 10 18:40:58 পিএসটি 2015; রুট: xnu-3248.30.4 ~ 1 / RELEASE_X86_64 x86_64
ash বাশ - রূপান্তর
বাশ - রূপান্তর
জিএনইউ বাশ, সংস্করণ ৩.২.৫7 (১) -রেলিজ (x86_64-আপেল-ডারউইন 15)
কপিরাইট (সি) 2007 ফ্রি সফটওয়্যার ফাউন্ডেশন, ইনক।
$
$ ((এক্স = 2 ** 16)); প্রতিধ্বনি $ এক্স
65536 <- ঠিক আছে, কমপক্ষে UInt16
$ ((এক্স = 2 ** 32)); প্রতিধ্বনি $ এক্স
4294967296 <- ঠিক আছে, কমপক্ষে UInt32
$ ((এক্স = 2 ** 64)); প্রতিধ্বনি $ এক্স
0 <- উফ, UInt64 নয়
$ ((এক্স = (2 ** 63) -1)); প্রতিধ্বনি $ এক্স
9223372036854775807 <- ঠিক আছে, কমপক্ষে SInt64
$ ((এক্স ++)); প্রতিধ্বনি $ এক্স
-9223372036854775808 <- উপচে পড়া এবং negativeণাত্মক মোড়ানো। অবশ্যই SInt64 হতে হবে

3

আমি একটি লুপ সেট আপ। while return status is 0 increment a variable with addition and print the variable to stdout আমি এটি কেবল 2 ^ 31 এর নীচে শুরু করেছি, আমি এটি কোনও সমস্যা ছাড়াই 2 ^ 31 এবং 2 ^ 32 উভয়কেই দিয়ে যেতে দিয়েছি, এটি থামিয়ে দিয়েছি, তারপরে প্রাথমিক মানটি কেবল 2 ^ 63 এর নীচে সেট করুন। ফলাফলটি ছিল যে এটি নির্বিঘ্নে 9.22e18 থেকে -9.22e18 এ গড়িয়েছে এবং ইতিবাচকভাবে বাড়তে থাকে। (শূন্যের দিকে)

কেবলমাত্র আমার while [ $? -eq 0 ]লুপের মধ্যে কমান্ডের প্রস্থান স্থিতিটি ব্যবহার করছিলাম তা পরীক্ষা করতে , পূর্ববর্তী স্ক্রিপ্টের প্রস্থান স্থিতি বা কিছু বিজোড়তা ব্যবহার না করে, আমি এটি শূন্য-বহির্গমন প্রস্থান করার জন্য তৈরি লুপের ভিতরে একটি অতিরিক্ত কমান্ড দিয়ে চালিয়েছি নির্দিষ্ট বর্ধিত স্থিতি।

সুতরাং এটি স্বাক্ষরিত, এটি সর্বোচ্চ মান থামার পরিবর্তে গড়িয়ে যাবে এবং কোনও ত্রুটি বার্তা ছাড়াই এটি করে। সুতরাং সত্যই অসীম লুপে শেষ হওয়া সম্ভব। এটি 64 বিট হার্ডওয়্যার এবং 64 বিট লিনাক্স ওএসকে পুরানো 16 বা 32 বিট স্ট্যান্ডার্ডের মধ্যে সীমাবদ্ধ করে না।


2

বাশ 64-বিট পূর্ণসংখ্যা ব্যবহার করে। সুতরাং আপনি যদি ভেরিয়েবলের সর্বোচ্চ সংখ্যায় পৌঁছানোর পরে বৃদ্ধি করেন তবে ভেরিয়েবল উপচে পড়বে। স্বাক্ষরযুক্ত স্বাক্ষরযুক্ত এবং স্বাক্ষরিত পূর্ণসংখ্যা সহ আমার পরীক্ষা নীচে is

MAX_UINT = 18446744073709551615
MAX_INT = 9223372036854775807

$ printf "%llu\n" $((2**64))
0
$ printf "%llu\n" $((2**64-1))
18446744073709551615

$ printf "%lld\n" $((2**63-1))
9223372036854775807
$ printf "%lld\n" $((2**63))
-9223372036854775808
$ printf "%lld\n" $((2**64-1))
-1

2
এটি কীভাবে প্রশ্নের উত্তর দেয় তা ব্যাখ্যা করে কিছু পাঠ্য যুক্ত করুন। দেখে মনে হচ্ছে আপনি কোডের মাধ্যমে উপরের সীমাটি প্রদর্শনের চেষ্টা করছেন - আপনি কেন ব্যাখ্যা করতে পারবেন কেন এই কোড প্রয়োজনীয় ফলাফল অর্জন করবে?
স্যার অ্যাডিলেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.