ฉันจะแสดงจำนวนอนันต์ใน Python ได้อย่างไร?


559

ฉันจะแสดงจำนวนอนันต์ในไพ ธ อนได้อย่างไร ไม่ว่าคุณจะป้อนหมายเลขใดในโปรแกรมไม่ควรมีจำนวนมากกว่าการแสดงอินฟินิตี้นี้


29
math.infมีประโยชน์ในฐานะที่เป็นค่าเริ่มต้นในปัญหาการปรับให้เหมาะสมเพราะมันทำงานได้อย่างถูกต้องกับขั้นต่ำเช่น min(5, math.inf) == 5. ยกตัวอย่างเช่นในขั้นตอนวิธีการเส้นทางที่สั้นที่สุดคุณสามารถตั้งค่าระยะทางที่ไม่เป็นที่รู้จักmath.infโดยไม่จำเป็นต้องกรณีพิเศษหรือถือว่าขอบเขตบนNone 9999999ในทำนองเดียวกันคุณสามารถใช้-math.infเป็นค่าเริ่มต้นสำหรับปัญหาการขยายใหญ่สุด
พันเอก Panic

ในกรณีส่วนใหญ่ทางเลือกในการใช้ math.inf ในปัญหาการปรับให้เหมาะสมคือเริ่มต้นด้วยค่าแรก
Tobias Bergkvist

คำตอบ:


707

ใน Python คุณสามารถ:

test = float("inf")

ใน Python 3.5 คุณสามารถทำสิ่งต่อไปนี้

import math
test = math.inf

แล้ว:

test > 1
test > 10000
test > x

จะเป็นจริงเสมอ นอกจากแน่นอนตามที่ระบุไว้ x ยังเป็นอนันต์หรือ "น่าน" ("ไม่ใช่ตัวเลข")

นอกจากนี้ (หลาม 2.x เท่านั้น) ในการเปรียบเทียบกับEllipsis, float(inf)เป็นเลสเบี้ยนเช่น:

float('inf') < Ellipsis

จะกลับมาจริง


15
และถ้า x เป็น inf นั้นจะไม่เป็นจริง
Maxim Egorushkin

5
โปรดทราบว่าไม่มีกำหนดอินฟินิตี้ในบรรทัดฐาน IEEE 754-1985 ( en.wikipedia.org/wiki/IEEE_754-1985 ) ซึ่งภาษาสมัยใหม่ใด ๆ จะพึ่งพา อีกประเด็นหนึ่งคือตามมาตรฐานนี้อินฟินิตี้จะต้อง (ชัด) เป็นจำนวนจุดลอยตัว สิ่งนี้อาจอธิบายได้ว่าทำไม Python เลือกไวยากรณ์ akward นี้
quickbug

3
มันจะไม่เป็นจริงเช่นกันหาก x เป็นบิวด์อินEllipsisซึ่งเปรียบเทียบได้มากกว่าทุกสิ่งรวมถึงอินฟินิตี้ float("inf") < Ellipsisส่งคืน True
Singletoned

2
ไม่แน่ใจเกี่ยวกับคนสุดท้ายmath.inf < ...หรือfloat('inf') > Ellipsisพ่นTypeError: unorderable types: float() < ellipsis()อย่างน้อยสำหรับฉัน
Peter Goldsborough

2
ฉันอายุ 3.5 ปี อาจเป็นสิ่งที่ 2.x / 3.x
Peter Goldsborough


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
ทำไมคุณไม่เพิ่มว่าทำไมมันเป็นความสะดวกสบายน้อยลงและทำไมทุกคนควรจะใช้มัน ?
Niccolò

4
มาดูกันว่า: Decimal('Infinity') == float('inf')ผลตอบแทนTrueมันเหมือนกันมาก
เดนิสมาลินอฟสกี้

8
@afzal_SH float('inf') is float('inf')กลับมาFalseเหมือนกัน
nemesisdesign

4
อนันต์แตกต่างจากของตัวเองดังนั้นความคิดเห็นของคุณจึงไม่สมเหตุสมผลนัก IMHO
nemesisdesign

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] ซึ่งเรียงลำดับเท็จ and True .. ข้อมูลเพิ่มเติมดูได้ที่: stackoverflow.com/questions/2988017/…
Manoel Vilela

13

ใน python2.x มีแฮ็คสกปรกที่ให้บริการตามวัตถุประสงค์นี้ (ไม่เคยใช้เว้นแต่จำเป็นจริงๆ):

None < any integer < any string

ดังนั้นการตรวจสอบi < ''ถือสำหรับจำนวนเต็มใดTruei

มันถูกคัดค้านอย่างสมเหตุสมผลใน python3 ตอนนี้การเปรียบเทียบดังกล่าวจบลงด้วย

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

5
หากคุณมีคุณจริงๆใช้นี้อย่างน้อยห่อในชื่อที่อ่านได้บางอย่างเช่น:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Ali Rasim Kocal

5
แต่คุณไม่ต้องใช้สิ่งนี้
Joost

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.