পাইথনে আমি কীভাবে অসীম সংখ্যার প্রতিনিধিত্ব করতে পারি?


558

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


29
math.infঅপ্টিমাইজেশান সমস্যার ক্ষেত্রে প্রাথমিক মান হিসাবে কার্যকর, কারণ এটি কমপক্ষে উদাহরণ সহ সঠিকভাবে কাজ করে। min(5, math.inf) == 5। উদাহরণস্বরূপ, সংক্ষিপ্ততম পথ অ্যালগরিদমগুলিতে, আপনি math.infবিশেষ কেসের প্রয়োজন ছাড়াই অজানা দূরত্ব নির্ধারণ করতে পারেন Noneবা উপরের সীমাটি ধরে নিচ্ছেন 9999999। একইভাবে, আপনি -math.infসর্বাধিক সমস্যার জন্য প্রারম্ভিক মান হিসাবে ব্যবহার করতে পারেন ।
কর্নেল আতঙ্ক

বেশিরভাগ ক্ষেত্রেই, অপ্টিমাইজেশান সমস্যার ক্ষেত্রে math.inf ব্যবহারের বিকল্পটি প্রথম মান দিয়ে শুরু করা হয়।
টোবিয়াস বার্গকভিস্ট

উত্তর:


705

পাইথনে, আপনি এটি করতে পারেন:

test = float("inf")

পাইথন 3.5 তে, আপনি এটি করতে পারেন:

import math
test = math.inf

এবং তারপর:

test > 1
test > 10000
test > x

সর্বদা সত্য হবে। অবশ্যই যেমনটি উল্লেখ করা হয়েছে, এক্সটি অনন্ত বা "নান" ("একটি সংখ্যা নয়")।

উপরন্তু (পাইথন কেবলমাত্র 2.x), একটি তুলনায় Ellipsis, float(inf)ক্ষুদ্রতর হয়, যেমন:

float('inf') < Ellipsis

সত্য ফিরে আসবে।


15
এবং যদি এক্স এছাড়াও ইনফ হয় তবে এটি সত্য হবে না।
ম্যাক্সিম এগারুশকিন

5
নোট করুন যে অনন্ততা আইইইই 754-1985 ( en.wikedia.org/wiki/IEEE_754-1985 ) আদর্শে সংজ্ঞায়িত হয়েছে , যে কোনও আধুনিক ভাষা নির্ভর করবে। আরেকটি বিষয় হ'ল, এই নিয়ম অনুসারে, অনন্ততা অবশ্যই (অবশ্যই) একটি ভাসমান-পয়েন্ট সংখ্যা হতে হবে। এটি ব্যাখ্যা করতে পারে পাইথন কেন এই আওয়ারওয়ার্ড সিনট্যাক্সটি বেছে নিয়েছে।
quickbug

3
এক্সটি যদি অন্তর্নির্মিত হয় তবে এটিও সত্য হবে না Ellipsis, যা অনন্ত সহ সমস্ত কিছুর চেয়ে বৃহত্তর তুলনা করে। float("inf") < Ellipsisসত্য প্রত্যাবর্তন করে
একক

2
অন্ততপক্ষে আমার জন্য শেষটি সম্পর্কে নিশ্চিত নয় math.inf < ...বা float('inf') > Ellipsisএকটি নিক্ষেপ TypeError: unorderable types: float() < ellipsis()করছে।
পিটার গোল্ডসবারো

2
আমি 3.5 তে আছি সম্ভবত একটি 2.x / 3.x জিনিস।
পিটার গোল্ডসবারো

80

পাইথন ৩.৩ থেকে আপনি ব্যবহার করতে পারেন math.inf:

>>> import math
>>> math.inf
inf

47

কেউ স্পষ্টভাবে নেতিবাচক অনন্ত সম্পর্কে উল্লেখ করেছেন বলে মনে হয় না, তাই আমার মনে হয় এটি যুক্ত করা উচিত।

ইতিবাচক অনন্তের জন্য (কেবলমাত্র সম্পূর্ণতার জন্য):

math.inf

নেতিবাচক অসীমের জন্য:

-math.inf

30

আপনি ঠিক কী করছেন তা আমি জানি না, তবে float("inf")আপনাকে একটি ফ্লোট ইনফিনিটি দেয় যা অন্য কোনও সংখ্যার চেয়ে বেশি।


27

সেখানে NumPy লাইব্রেরিতে একটি অনন্ত হল: from numpy import inf। নেতিবাচক অনন্ত পেতে সহজভাবে লিখতে পারেন -inf


24

আরেকটি, কম সুবিধাজনক, এটি করার উপায় হচ্ছে Decimalক্লাস ব্যবহার করা :

from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')

21
আপনি কেন যুক্ত করবেন না কেন এটি কম সুবিধাজনক এবং কেন এটি ব্যবহার করা উচিত ?
নিকোলো

4
আসুন দেখুন: Decimal('Infinity') == float('inf')ফিরে আসে True, তাই এটি প্রায় একই রকম।
ডেনিস ম্যালিনভস্কি

8
@afzal_SH float('inf') is float('inf')আয় Falseখুব
nemesisdesign

4
অনন্ত নিজে থেকেও আলাদা, তাই আপনার মন্তব্যটি আমার কাছে খুব একটা অর্থবহ হয়নি, আইএমএইচও
নেমেসিসডিজাইন

5
float('inf') is float('inf')-> False, কেবল ধরে রেখেছে যে তারা বিভিন্ন উদাহরণ সহ পৃথক পৃথক বস্তু, তবে অভ্যন্তরীণ বিষয়বস্তু পৃথক নয় - বাস্তবে @nemesisdesign পয়েন্টটি float('int') == float('int')ধরে রেখেছিল True। পরিবর্তনীয় বস্তুর সাথে তুলনা করার মতো একই সমস্যাটি [1,2,3] এর মতো [1,2,3] এবং [1,2,3] == [1,2,3], ক্রমে, মিথ্যা এবং সত্য .. আরও তথ্য দেখুন: stackoverflow.com/questions/2988017/…
মনোয়েল ভিলালা

13

পাইথন ২.এক্সে একটি নোংরা হ্যাক ছিল যা এই উদ্দেশ্যে কাজ করেছিল (একেবারে প্রয়োজনীয় না হলে এটি ব্যবহার না করে):

None < any integer < any string

সুতরাং চেকটি কোনও পূর্ণসংখ্যার জন্য i < ''ধারণ করে ।Truei

এটি পাইথন 3 এ যুক্তিসঙ্গতভাবে হ্রাস করা হয়েছে। এখন এই ধরনের তুলনা শেষ হয়

TypeError: unorderable types: str() < int()

5
আপনি যদি সত্যিই এটি ব্যবহার করেন তবে কমপক্ষে এটি কিছু পাঠযোগ্য নামগুলিতে MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
মুড়ে রাখুন

5
তবে আপনাকে এটি ব্যবহার করতে হবে না।
জুস্ট

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