Bagaimana saya bisa mewakili angka tak terbatas dengan python? Tidak peduli nomor mana yang Anda masukkan dalam program, tidak ada angka yang harus lebih besar dari representasi infinity ini.
Bagaimana saya bisa mewakili angka tak terbatas dengan python? Tidak peduli nomor mana yang Anda masukkan dalam program, tidak ada angka yang harus lebih besar dari representasi infinity ini.
Jawaban:
Dengan Python, Anda bisa melakukan:
test = float("inf")
Di Python 3.5, Anda dapat melakukan:
import math
test = math.inf
Lalu:
test > 1
test > 10000
test > x
Akan selalu benar. Kecuali tentu saja, seperti yang ditunjukkan, x juga tak terbatas atau "nan" ("bukan angka").
Selain itu (Python 2.x ONLY), dibandingkan dengan Ellipsis
, float(inf)
lebih rendah, misalnya:
float('inf') < Ellipsis
akan kembali benar.
Ellipsis
, yang membandingkan lebih besar dari segalanya, termasuk tak terhingga. float("inf") < Ellipsis
mengembalikan True
math.inf < ...
atau float('inf') > Ellipsis
melempar TypeError: unorderable types: float() < ellipsis()
, setidaknya untuk saya.
Karena Python 3.5 Anda dapat menggunakan math.inf
:
>>> import math
>>> math.inf
inf
Saya tidak tahu persis apa yang Anda lakukan, tetapi float("inf")
memberi Anda float Infinity, yang lebih besar dari angka lainnya.
Ada tak terhingga di perpustakaan NumPy: from numpy import inf
. Untuk mendapatkan infinity negatif seseorang cukup menulis -inf
.
Cara lain yang kurang nyaman adalah dengan menggunakan Decimal
kelas:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
pengembalian True
, jadi hampir sama.
float('inf') is float('inf')
kembali False
juga
float('inf') is float('inf')
-> False
, hanya menyatakan bahwa mereka adalah objek yang berbeda dengan kasus yang berbeda, tetapi tidak bahwa isi internal yang berbeda - sebenarnya sebagai @nemesisdesign menunjuk float('int') == float('int')
berpegang True
. Ini adalah masalah yang sama seperti membandingkan objek yang bisa berubah seperti [1,2,3] adalah [1,2,3] dan [1,2,3] == [1,2,3], yang, dalam urutan, False dan Benar .. Info lebih lanjut lihat: stackoverflow.com/questions/2988017/…
Di python2.x ada hack kotor yang melayani tujuan ini (JANGAN PERNAH menggunakannya kecuali benar-benar diperlukan):
None < any integer < any string
Dengan demikian, cek i < ''
berlaku True
untuk bilangan bulat apa pun i
.
Sudah cukup ditinggalkan di python3. Sekarang perbandingan seperti itu berakhir dengan
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Juga jika Anda menggunakan SymPy yang dapat Anda gunakan sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
dll.
math.inf
berguna sebagai nilai awal dalam masalah optimisasi, karena ia bekerja dengan benar dengan min, mis.min(5, math.inf) == 5
. Misalnya, dalam algoritme jalur terpendek, Anda dapat mengatur jarak yang tidak diketahuimath.inf
tanpa perlu menggunakan case khususNone
atau menganggap batas atas9999999
. Demikian pula, Anda dapat menggunakan-math.inf
sebagai nilai awal untuk masalah maksimalisasi.