কম্পিউটার

রুবি ইনফিনিটি:এটি কীভাবে কাজ করে এবং কেন এটি গুরুত্বপূর্ণ

রুবিতে অসীম কি?

এটি এমন কিছু যার একটি শুরু বিন্দু আছে কিন্তু শেষ নেই।

রুবিতে, আমরা এই অসীমতার ধারণা প্রকাশ করতে পারি Float::INFINITY সহ ধ্রুবক।

আপনি হয়ত ভাবছেন এটা কিভাবে দরকারী।

আমাকে উদাহরণ সহ ব্যাখ্যা করতে দিন!

অরিথমেটিক অপারেশনের ফলাফল হিসাবে অসীম

রুবি একটি Infinity প্রদান করে বস্তু, নির্দিষ্ট গণিত ক্রিয়াকলাপের ফলাফল হিসাবে।

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

আপনি "শূন্য দ্বারা বিভাজন" ত্রুটির সাথে পরিচিত হতে পারেন।

এটি এখানে :

1/0
# ZeroDivisionError: divided by 0

কিন্তু…

আপনি একটি ফ্লোট ব্যবহার করলে, আপনি অন্য কিছু পাবেন:

1/0.0
# Infinity

Infinity !

কিন্তু এটাই সব নয়।

আপনি যদি 0 এর একটি বিভাগ চেষ্টা করেন 0.0 দ্বারা , তাহলে আপনি আরেকটি বিশেষ মান পাবেন।

একবার দেখুন :

0/0.0
# NaN

এই NaN কি?

এর অর্থ "নম্বর নয়" এবং আমি যতদূর জানি, রুবিতে এটিই একমাত্র জায়গা যেখানে আপনি এই মানটি পাবেন৷

এটি একটি জিনিস কেন?

এটি IEEE 754 স্পেসিফিকেশনের অংশ, যা ব্যাখ্যা করে কিভাবে ফ্লোটিং-পয়েন্ট অপারেশনগুলি আচরণ করা উচিত৷

Btw, কিছু সম্পর্কিত পদ্ধতি আছে :

  • nan?
  • finite?
  • infinite?

আপনি বিশেষ মান পরীক্ষা করতে এই পদ্ধতিগুলি ব্যবহার করতে পারেন৷

এই পদ্ধতিগুলি ফ্লোটগুলিতে উপলব্ধ৷

Ruby 2.4 থেকে আপনি finite? ব্যবহার করতে পারেন &infinite? পূর্ণসংখ্যা সহ।

কিভাবে অসীম রেঞ্জ তৈরি করবেন

ঠিক আছে।

এটি আকর্ষণীয় ছিল... আসুন আরও উদাহরণ দেখি।

এখন রেঞ্জের সাথে!

এখানে একটি অসীম পরিসর আছে :

(1..Float::INFINITY).take(10)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

এটি সহায়ক হতে পারে যখন আপনি আগে থেকে পরিসরের শেষ জানেন না৷

একটি সমস্যা…

এটি শুধুমাত্র সংখ্যার সাথে শুরুর মান হিসাবে কাজ করে।

উদাহরণ :

("a"..Float::INFINITY)
# ArgumentError: bad value for range

সমাধান কি?

রুবি 2.6 দিয়ে, আপনি এটি করতে পারেন :

("a"..).take(5)
# ["a", "b", "c", "d", "e"]

হ্যাঁ, এটি একটি ভুল নয়! এই পরিসরের কোন শেষ মান নেই, শুধুমাত্র "a" এর একটি প্রারম্ভিক মান , তারপর দুটি বিন্দু .. এটিকে একটি অন্তহীন পরিসরে পরিণত করতে৷

এটি নতুন সিনট্যাক্স।

আপনি যদি এটি কাজ করতে চান তবে রুবি 2.6+ ব্যবহার করুন৷

সর্বোচ্চ এবং সর্বনিম্ন মান হিসাবে অসীম

Infinity এর জন্য আরেকটি ব্যবহারিক ব্যবহার ?

আচ্ছা…

এটি সবচেয়ে বড় (Infinity ) এবং সবচেয়ে ছোট (-Infinity রুবিতে ) নম্বর।

আপনি এটি একটি প্রারম্ভিক মান হিসাবে ব্যবহার করতে পারেন৷

এখানে একটি উদাহরণ আছে :

def smallest_percent_size(style, ary_size)
  @smallest_percent ||= Float::INFINITY

  if style == :percent && ary_size < @smallest_percent
    @smallest_percent = ary_size
  end

  @smallest_percent
end

এই কোডটি রুবোকপ থেকে এসেছে, একটি ওপেন সোর্স প্রজেক্ট।

এটি কীভাবে কাজ করে তা এখানে রয়েছে :

আমরা সবচেয়ে ছোট অ্যারের আকার খুঁজে বের করার চেষ্টা করছি, কিন্তু nil ব্যবহার করার কারণে এর জন্য আমাদের একটি প্রারম্ভিক মান প্রয়োজন আপনাকে একটি ত্রুটি দেবে৷

আপনি একটি বড় সংখ্যা টাইপ করতে পারেন৷ এবং আশা করি এটি যথেষ্ট।

অথবা আপনি Float::INFINITY ব্যবহার করতে পারেন , জেনে রাখা সম্ভব সবচেয়ে বড় সংখ্যা।

সারাংশ

আপনি রুবিতে অসীম সম্পর্কে শিখেছেন, এটি কী, এটি কোথায় প্রদর্শিত হতে পারে এবং কীভাবে এটি ব্যবহার করতে হয়।

অনুগ্রহ করে এই নিবন্ধটি শেয়ার করুন যাতে আরো মানুষ এটি থেকে উপকৃত হতে পারে৷

পড়ার জন্য ধন্যবাদ!


  1. রুবিতে পরিবেশের ভেরিয়েবলগুলি কীভাবে ব্যবহার করবেন

  2. একটি ম্যাট্রিক্স কি এবং রুবিতে এটি কীভাবে ব্যবহার করবেন?

  3. রেলে রুবি কি এবং কেন এটি দরকারী?

  4. রুবিতে স্ট্রাকট এবং ওপেনস্ট্রাক্ট কীভাবে ব্যবহার করবেন