এমন কোনও নথি যা বলে যে ঠিক কত সংখ্যার রেঞ্জ? নেট বিগইন্টিজার্স ডিজাইন করা হয়েছে?


12

আমি নেট বিগইন্টিজারের সাথে ঘুরে বেড়াচ্ছি এবং মূলত আমি ভাবছি যে সংখ্যাটি - আনুমানিক উত্তরটি ভাল হবে - এটি হ'ল বক্ররেখের বিচ্যুতির বিন্দু (অপারেশনের জন্য প্রয়োজনীয় সময়ের বর্ধন) বনাম (বিগইন্টিজারের মান))?

বা এগুলি এমন কোনও বিচ্যুতি নিয়ে ডিজাইন করা হয়েছে যে যদি আমরা বিগইন্টিজারের মান বনামের মূল্য 1 থেকে অনন্তের জন্য প্রয়োজনীয় সময়ের বৃদ্ধির পরিকল্পনা করি তবে আমাদের সমস্ত পথের মসৃণ বক্ররেখা থাকবে?

উদাহরণস্বরূপ, ধরে নিচ্ছি অ্যারেগুলি 50 টি আইটেম পরিচালনা করার ক্ষমতা নিয়ে ডিজাইন করা হয়েছে। এর অর্থ হল আমার কাছে যদি 1 টি আইটেম থাকে তবে অপারেশনগুলি f (1) সময় হয় are এবং যখন আমার 2 টি আইটেম রয়েছে, অপারেশনগুলি f (2) সময় হয়। যদি আমার 50 টি আইটেম থাকে তবে ক্রিয়াকলাপ এফ (50) সময় হয়। তবে যেহেতু এটি কেবল 50 টি আইটেম পরিচালনা করার জন্য ডিজাইন করা হয়েছে, যখন আমাদের 51 টি আইটেম থাকবে তখন কাজগুলি হবে জি (51) যেখানে জি (51)> চ (51) হবে।

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

এটির মতো বাস্তবায়িত হয়েছে বলে দাবি করে এমন কোনও দলিল সম্পর্কে কি কেউ / জানেন?


3
@ ডাউন ভোটারগণ, নীচের ভোটের অর্থ যদি কিছু হয় না তবে প্রশ্নটি কেন ভাল প্রশ্ন নয় তা ব্যাখ্যা করে কোনও মন্তব্য রাখতে পারছে না mean আমি এটিকে উত্সাহিত করেছি কারণ এতে কোনও সমস্যা নেই।
মাফিন ম্যান

আমি ডাউনভোট করিনি, তবে আমি নিশ্চিত না যে এখানে প্রশ্ন কী। আপনি কি বিগিন্টে সংযোজনগুলি (সংযোজন, গুণ, ভাগ ইত্যাদি) এর রানটাইম / মেমরির জটিলতা জানতে চান?
নিকি

উদাহরণস্বরূপ, ধরে নিচ্ছি অ্যারেগুলি 50 টি আইটেম পরিচালনা করার ক্ষমতা নিয়ে ডিজাইন করা হয়েছে। এর অর্থ হল আমার কাছে যদি 1 টি আইটেম থাকে এবং অপারেশনগুলি f (1) সময় হয়। এবং যখন আমার 2 টি আইটেম রয়েছে, অপারেশনগুলি f (2) সময় হয়। যদি আমার 50 টি আইটেম থাকে তবে অপারেশন f (50) সময় হয়। তবে যেহেতু এটি কেবল 50 টি আইটেম পরিচালনা করার জন্য ডিজাইন করা হয়েছে, যখন আমাদের 51 টি আইটেম থাকবে তখন অপারেশনগুলি জি (51) হবে যেখানে জি (51)> চ (51)
প্যাসেয়ার

@ চার্লস ই। অনুদান হ্যাঁ! এই আমি কথা বলছি। প্রশ্ন আছে যে কেউ / এমন কোনও দস্তাবেজ সম্পর্কে দাবি করে যে এটি বাস্তবায়িত হয়েছে বলে দাবি করে?
পেসিয়ার

@ পেসিয়ার আমি আমার মন্তব্যে আমার মন্তব্যে স্থানান্তরিত করেছি এবং ঠিক এটি নিয়ে আলোচনা করা একটি নথিতে একটি লিঙ্ক যুক্ত করেছি।
চার্লস ই। গ্রান্ট

উত্তর:


7

সম্ভবত ইউলং.ম্যাক্সভ্যালুয়ের চেয়ে বড় বা লংয়ের চেয়ে ছোট হতে পারে এমন যে কোনও সংখ্যা বিগইন্টিজার ব্যবহার করে প্রতিনিধিত্ব করা উচিত।

যদি না হয় (লং.মিনভ্যালু <= এক্স <= লং.ম্যাক্সভ্যালু) তবে বিগইন্টিজার

সাধারণ আদিমরা যে পরিমাণ পরিচালনা করতে পারে তার চেয়ে বড় সংখ্যার জন্য বিগইন্টিজার।

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

উদাহরণস্বরূপ, long64 বিট প্রশস্ত এবং এই সীমাটি ধরে রাখতে পারে: -9,223,372,036,854,775,808 থেকে 9,223,372,036,854,775,80। উলং 0 থেকে 18,446,744,073,709,551,615 ধরে রাখতে পারে। যদি আপনার নম্বরগুলি এর চেয়ে বড় বা ছোট হয় তবে বিগইন্টিজার আপনার একমাত্র বিকল্প

আসল ওয়ার্ল্ড অ্যাপ্লিকেশনটিতে আমি তাদের একবার ব্যবহার করতে দেখেছি তা হল স্টারচার্টিং অ্যাপ্লিকেশন।

এছাড়াও দেখুন:। নেট মধ্যে আদিম পরিসীমা


আমি অবশ্যই বলতে চাই আমি যখনই পারি আমাদের সাধারণ আদিম ব্যবহার করা উচিত .. আমি বলতে চাইছি বিগইন্টেগারটি উলংয়ের চেয়ে ১০০ গুণ বড় ডিজাইন করা হয়েছে ax মানে আমি জানি এটি ইউলং.ম্যাক্সভ্যালুয়ের চেয়ে ১০০ গুণ বড় সাপোর্ট করতে পারে তবে এটি কি এই পরিসীমাটিকে বিবেচনায় রেখে ডিজাইন করা হয়েছে, বা এটি "সাধারণ-সাধারণ প্রয়োজনের বাইরে" ঘোষিত এই সীমার সাথে ডিজাইন করা হয়েছে?
পেসারিয়ার

5
আপনি বিগইন্টেজার ব্যবহার না করে উলং.ম্যাক্সভ্যালুয়ের চেয়ে বড় একটিরও বেশি কোনও প্রতিনিধিত্ব করতে পারবেন না, সুতরাং এটি তার জন্য। সম্ভবত যে কোনও সংখ্যাই সম্ভবত ইউলংয়ের চেয়ে বড় হতে পারে ax ম্যাক্সভ্যালু একটি বিগইন্টিজার হওয়া উচিত।
মালফিস্ট

অবশ্যই ইউলং.ম্যাক্সভ্যালুয়ের চেয়ে বড় এবং বিগইন্টিজার ব্যবহার না করে সংখ্যা উপস্থাপনের উপায় রয়েছে। আমি কেবল একটি কাস্টম গঠন করে একটি ULong এবং একটি বুলিয়ান এবং Viola নিয়ে গঠিত লিখতে আমি ULong.MaxValue দ্বিগুণ পর্যন্ত উপস্থাপন করতে পারেন পারে
Pacerier

হ্যাঁ, তবে এটি বিগইন্টিজারটি ব্যবহার করা কম জটিল এবং এটি যদি আরও দ্রুততর হয় তবে এটি সম্ভবত তত দ্রুত হবে না এবং এটি বিগইন্টিজারের মতো নমনীয় হবে না। আপনি বুলিয়ানগুলির একটি অ্যারে সহ খুব বড় সংখ্যক প্রতিনিধিত্ব করতে পারেন, তবে এটি খুব জটিল।
ম্যালফিস্ট

2
@ মাভ্রিক, আমি এটার উত্তর দিয়েছি তার চেয়ে সে একে একে সম্পূর্ণ আলাদা প্রশ্নে পরিবর্তন করেছে।
মলফিস্ট

4

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

অন্যরা যেমন উল্লেখ করেছে, উলং 0 থেকে 18,446,744,073,709,551,615 এর মধ্যে ধরে রাখতে পারে এবং যতক্ষণ আপনি এই পরিসরে থাকেন আপনি সঠিক পাটিগণিত করতে পারবেন। যদি আপনি এই সীমার বাইরেও 1 যানবাহনটি পান তবে আপনি একটি ওভারফ্লো পাবেন, সুতরাং আপনার প্রশ্নের উত্তরটি হ'ল বিগইন্টিজার ব্যবহার করুন যদি আপনার সঠিক গাণিতিক প্রয়োজন হয় এবং কোনও মধ্যবর্তী ফলাফল 18,446,744,073,709,551,615 ছাড়িয়ে যাওয়ার সম্ভাবনা রয়েছে।

বিজ্ঞান, ইঞ্জিনিয়ারিং এবং ফিনান্সের বেশিরভাগ সমস্যাগুলি ভাসমান পয়েন্ট সংখ্যাগুলি দ্বারা বাধ্য করা অনুমানের সাথে বেঁচে থাকতে পারে এবং বিগইন্টিজার গাণিতিকের সময় ব্যয় বহন করতে পারে না। বেশিরভাগ বাণিজ্যিক গণনাগুলি ভাসমান পয়েন্ট পাটিগণিতের অনুমানের সাথে বাঁচতে পারে না তবে 0 থেকে 18,446,744,073,709,551,615 এর মধ্যে কাজ করে, তাই তারা সাধারণ পাটিগণিত ব্যবহার করতে পারে। সংখ্যা তত্ত্ব থেকে অ্যালগরিদম ব্যবহার করার সময় বিগইন্টিজারের প্রয়োজন হয় যা ক্রিপ্টোগ্রাফির মতো জিনিস অন্তর্ভুক্ত করে (ভাবুন 50 ডিজিটের প্রাথমিক সংখ্যা)। এটি কখনও কখনও বাণিজ্যিক অ্যাপ্লিকেশনগুলিতেও ব্যবহৃত হয় যখন সঠিক হিসাবের প্রয়োজন হয়, গতি খুব বেশি গুরুত্বপূর্ণ নয় এবং সঠিক স্থির দশমিক পয়েন্ট সিস্টেম স্থাপন করা খুব বেশি সমস্যা হয়।

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

আপনি যদি "বিগিনটেজারের গণনামূলক জটিলতা" গুগল করেন তবে আপনি লাঠি নাড়ানোর চেয়ে আরও রেফারেন্স পাবেন। আপনার প্রশ্নের সাথে সরাসরি কথা বলার একটি হ'ল দুটি স্বেচ্ছাচারিত নির্ভুলতা পাটিগণিত প্যাকেজের তুলনা


4

স্মৃতি সীমা

BigInteger স্টোরেজ জন্য int অ্যারে উপর নির্ভর করে। এটি ধরে নিলে, সর্বাধিক সংখ্যার জন্য তাত্ত্বিক সীমা, যে বিগইন্টিজার উপস্থাপন করতে সক্ষম,। নেট এ উপলব্ধ সর্বোচ্চ অ্যারে আকার থেকে প্রাপ্ত হতে পারে। অ্যারেগুলি সম্পর্কে এখানে একটি SO বিষয় রয়েছে: C # তে অ্যারের জন্য আমি কত মেমরি বরাদ্দ করতে পারি তা সন্ধান করা

ধরে নিই যে আমরা সর্বাধিক অ্যারে আকার জানি, আমরা সর্বাধিক সংখ্যাটি অনুমান করতে পারি, যা বিগইন্টিজার উপস্থাপন করতে পারেন: (2 ^ 32) ^ সর্বোচ্চ_আর_সাইজ, যেখানে:

  • 2 ^ 32 - অ্যারে ঘরে সর্বাধিক সংখ্যা
  • সর্বোচ্চ_আরআর_সাইজ - ইনট অ্যারের সর্বাধিক অনুমোদিত আকার যা 2 গিগাবাইটের অবজেক্ট আকারের দ্বারা সীমাবদ্ধ

এটি 600 মিলিয়ন দশমিক সংখ্যা সহ সংখ্যাটি দেয়।

পারফরম্যান্স সীমা

পারফরম্যান্সের ক্ষেত্রে, বিগইন্টেজার কর্টসুবা অ্যালগরিদমকে গুণনের জন্য এবং লিনিয়ার অ্যালগরিদম যুক্ত করার জন্য ব্যবহার করে। গুণগত জটিলতা হ'ল এর 3 * এন ^ 1,585অর্থ এটি বৃহত সংখ্যক ( জটিলতা গ্রাফ ) এর জন্যও বেশ ভাল স্কেল করবে তবে আপনি এখনও র‌্যাম এবং প্রসেসরের ক্যাশের উপর নির্ভর করে পারফরম্যান্স পেনাল্টি হিট করতে পারেন।

যতদূর, সর্বাধিক সংখ্যার আকার 2 জিবি-র মধ্যে সীমাবদ্ধ, বংশদ্ভুত মেশিনে আপনি অপ্রত্যাশিত পারফরম্যান্সের ফাঁক দেখতে পাবেন না, তবে এখনও million০০ মিলিয়ন অঙ্কের সংখ্যায় অপারেটিং অচল হয়ে যাবে।


এটি বিস্ময়কর তথ্য, তবে আপনার উত্সটি কোথায় যে বিগইন্টিজার ইন অ্যারেগুলিতে নির্ভর করে?
পেসারিয়ার

আমি ডটপিক ব্যবহার করে। নেট উত্সগুলিতে সবেমাত্র খনন করেছি। দেখে মনে হচ্ছে যে নম্বরটি নিজেই বিগইন্টেগার কাঠামোর [] _ডাটাতে সংরক্ষণ করা হয়েছে।
ভ্যালেরা কলুপাইভ

* আরও বিস্তৃত উত্তরের সাথে আপডেট হয়েছে তবে আমি কোনও নেট নেট কোড কোড খুঁজে পাচ্ছি না, যার সাথে আমি উল্লেখ করতে পারি, পচে যাওয়া স্নিপেটগুলি বাদে।
ভ্যালেরা কলুপাইভ

এটা আমার মনে হচ্ছে .NET একটি, standart গুণ অ্যালগরিদম নেই যেমন ILSpy থেকে মূর্ত আউট করা যেতে পারে: .NET BigInteger গুণ
ইভান Kochurkin

1

সীমাটি আপনার মেমরির আকার (এবং আপনার কাছে সময়)। সুতরাং, আপনি সত্যিই বড় সংখ্যা থাকতে পারে। কেভিন বলেছিলেন, ক্রিপ্টোগ্রাফিতে একজনকে কয়েক হাজার (বাইনারি) সংখ্যার সাহায্যে সংখ্যাকে গুণিত বা ক্ষয় করতে হয় এবং এটি কোনও সমস্যা ছাড়াই সম্ভব।

অবশ্যই, সংখ্যাগুলি বড় হওয়ার সাথে সাথে প্রায়শই অ্যালগরিদমগুলি ধীর হয়ে যায়, তবে এত ধীর হয় না।

আপনি যখন মেগা-ডিজিটের পরিসরে নম্বরগুলি ব্যবহার করছেন, আপনি অন্যান্য সমাধানগুলি সম্পর্কে ভাবতে চাইতে পারেন, যদিও - সত্যই তাদের সাথে গণনা করা ধীর হয়ে যায়।


0

বৈজ্ঞানিক সম্প্রদায়ের মধ্যে কয়েকটি ব্যবহার রয়েছে (যেমন গ্যালাক্সির মধ্যে দূরত্ব, ঘাসের ক্ষেত্রের মধ্যে পরমাণুর সংখ্যা ইত্যাদি)


আহ অভদ্র হতে হবে না .. তবে এই উত্তরটি প্রশ্নের সাথে কীভাবে সম্পর্কিত?
পেসিয়ার 17

2
প্রশ্ন হিসাবে, লিখিত হিসাবে, মনে হচ্ছে তিনি আসল-বিশ্বের উদাহরণ খুঁজছিলেন কেন এই জাতীয় ডেটা টাইপ তৈরি করা দরকার।
ডেভ ওয়াইজ

আরও ভাল পুনঃপ্রকাশ হবে "বিগইন্টিজার কি 10 ^ 30 এর মতো সংখ্যার জন্য সত্যিই উপযুক্ত?"
পেসারিয়ার

এর জন্য আমি আরও ভালভাবে ব্যবহার করব doubleবা float- আপনার কোনওভাবেই প্রয়োজনীয় যথার্থতা নেই।
পাওলো ইবারম্যান

আমাদের আরও নির্ভুলতার প্রয়োজন হলে "বিগইন্টিজার হ'ল 10 ^ 30 এর মতো সংখ্যার জন্য কি সত্যিই উপযুক্ত?"
পেসিয়ার 19

0

কেভিন স্লাইনের উত্তর হিসাবে, বিগন নাম্বারগুলি মূলত .NET গ্রন্থাগারে যুক্ত করা হয়েছিল কারণ অনেকগুলি আধুনিক ক্রিপ্টোগ্রাফিক অ্যালগরিদমের (ডিজিটাল স্বাক্ষর, পাবলিক / প্রাইভেট কী এনক্রিপশন ইত্যাদির) জন্য বিল্ডিং ব্লক হিসাবে তাদের প্রয়োজন ছিল। অনেক আধুনিক ক্রিপ্টোগ্রাফিক অ্যালগরিদম কয়েক হাজার বিট পর্যন্ত মাপের পূর্ণসংখ্যার মানগুলিতে গণনা জড়িত। যেহেতু বিগনম্বার ক্লাস একটি ভাল সংজ্ঞায়িত এবং দরকারী শ্রেণীর বর্ণনা দিয়েছে তাই তারা এটিকে জনসাধারণ করার সিদ্ধান্ত নিয়েছে (এটি ক্রিপ্টোগ্রাফিক এপিআইয়ের অভ্যন্তরীণ বিশদ হিসাবে রাখার পরিবর্তে)।


বিটিডব্লু কেবল কৌতূহল আপনার উত্সটি কোথায় যে বিগন নাম্বারগুলি .NET লাইব্রেরিতে যুক্ত করা হয়েছিল মূলত কারণ তাদের অনেক আধুনিক ক্রিপ্টোগ্রাফিক অ্যালগরিদমের জন্য বিল্ডিং ব্লক হিসাবে প্রয়োজন ছিল (এবং তাই কয়েক হাজার বিট পর্যন্ত মানগুলি সমর্থন করতে সক্ষম হওয়া উচিত)?
পেসেরিয়র
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.