Saya tidak yakin bilangan bulat Python dibatasi sama sekali. Pada saat Anda melintasi sys.maxint itu mengubah representasi internal dari int menjadi panjang, yang memiliki presisi tidak terbatas.
tchap
Saya bertanya karena saya perlu menemukan nilai min di antara sekelompok nilai satu per satu Jadi pertama-tama saya perlu menyimpan nilai yang besar ke variabel sehingga saya dapat membandingkannya dengan yang lain
Sreevisakh
2
Untuk komentar Anda - saya merekomendasikan untuk menggunakan fungsi bawaan min.
Jiri
5
Anda tidak memerlukan nilai maksimum jika Anda hanya mencoba mencari nilai minimum, meskipun Anda memprogram dalam C ++ atau bahasa lain. Jika Anda hanya akan mengulang semua elemen, cukup gunakan elemen pertama sebagai nilai awal Anda. (Tetapi lebih baik menggunakan minfungsinya, jika Anda benar-benar ingin memprogram dengan Python!)
John Y
3
@Sreevisakh: untuk "nilai besar", gunakan tak terhingga float("inf"),. Atau lebih baik, gunakan fungsi built-in min.
Fred Foo
Jawaban:
132
Bilangan bulat panjang:
Tidak ada batasan yang ditentukan secara eksplisit. Jumlah ruang alamat yang tersedia membentuk batas praktis.
(Diambil dari situs ini ). Lihat dokumen tentang Jenis Numerik di mana Anda akan melihatnya Long integers have unlimited precision. Di Python 2, Integer akan secara otomatis beralih ke long ketika mereka tumbuh melebihi batasnya:
Nilai maksimum int dapat ditemukan di Python 2.x dengan sys.maxint. Itu telah dihapus dengan Python 3, tetapi sys.maxsizeseringkali dapat digunakan sebagai gantinya. Dari changelog :
Konstanta sys.maxint telah dihapus, karena tidak ada lagi batasan untuk nilai integer. Namun, sys.maxsize dapat digunakan sebagai integer yang lebih besar daripada daftar praktis atau indeks string. Ini sesuai dengan ukuran integer "natural" implementasi dan biasanya sama dengan sys.maxint pada rilis sebelumnya pada platform yang sama (dengan asumsi opsi build yang sama).
sys.maxint Integer positif terbesar yang didukung oleh tipe integer reguler Python. Ini setidaknya 2 ** 31-1. Bilangan bulat negatif terbesar adalah -maxint-1 - hasil asimetri dari penggunaan aritmatika biner komplemen 2.
sys.maxsize Bilangan bulat positif terbesar yang didukung oleh jenis Py_ssize_t platform, dan dengan demikian daftar ukuran maksimum, string, dicts, dan banyak wadah lainnya dapat dimiliki.
sys.maxsize
Integer yang memberikan nilai maksimum yang dapat diambil variabel dengan tipe Py_ssize_t. Biasanya 2 ^ 31 - 1 pada platform 32-bit dan 2 ^ 63 - 1 pada platform 64-bit.
mengapung:
Ada float("inf")dan float("-inf"). Ini dapat dibandingkan dengan tipe numerik lainnya:
Saya mencoba kode yang sama tetapi masih menunjukkan tipe sebagai int di python 3 pada mesin windows 64 bit. Alasan apa pun yang berharga untuk itu.
ManojP
1
@ManojP Itu karena tidak ada lagi batasan untuk ukuran bilangan bulat di Python 3. Lihat kutipan blok pertama. Saya akan mengedit untuk mengklarifikasi bahwa contohnya adalah Python 2
keyser
39
Python longbisa sangat besar. Jika Anda membutuhkan nilai yang lebih besar dari nilai lainnya, Anda dapat menggunakannya float('inf'), karena Python tidak kesulitan membandingkan nilai numerik dari jenis yang berbeda. Demikian pula, untuk nilai yang lebih rendah dari nilai lainnya, Anda dapat menggunakan float('-inf').
jadi itu mengembalikan nilai yang sangat besar bukan?
Sreevisakh
4
Ia mengembalikan tak terhingga floating-point, yang lebih besar dari bilangan terbatas manapun.
Taymon
4
Saya harus mengatakan, jawaban ini pasti yang paling mendekati benar dalam hal menanggapi pertanyaan judul OP. Yaitu, "bagaimana Anda mendapatkan nilai sentinel Python yang akan lebih besar dari semua masukan Anda (atau setidaknya tidak lebih kecil dari nilai terbesar)?". Jadi saya telah memberikan suara positif untuk jawaban ini, tetapi saya pikir lebih baik jika OP belajar berpikir dengan Python.
John Y
Sepakat. Meskipun demikian, saya pernah berada dalam situasi di mana ini adalah satu-satunya cara untuk melakukan apa yang saya butuhkan.
Taymon
21
Jawaban langsung untuk pertanyaan judul:
Bilangan bulat tidak terbatas ukurannya dan tidak memiliki nilai maksimum dalam Python.
Jawab alamat mana yang menyatakan kasus penggunaan yang mendasari:
Menurut komentar Anda tentang apa yang Anda coba lakukan, saat ini Anda sedang memikirkan sesuatu yang serupa
Itu bukan cara berpikir dengan Python. Terjemahan yang lebih baik untuk Python (tapi tetap bukan yang terbaik)
minval = a[0]# Just use the first valuefor i in range(1, len(a)):
minval = min(a[i], a[i -1])
Perhatikan bahwa di atas tidak menggunakan MAXINT sama sekali. Bagian solusi itu berlaku untuk bahasa pemrograman apa pun: Anda tidak perlu mengetahui nilai setinggi mungkin hanya untuk menemukan nilai terkecil dalam sebuah koleksi.
Tapi bagaimanapun, apa yang sebenarnya Anda lakukan dengan Python itu adil
minval = min(a)
Artinya, Anda sama sekali tidak menulis satu lingkaran pun. Built-in min()fungsi mendapatkan minimal seluruh koleksi.
longketik Python 2.x menggunakan aritmatika presisi sewenang-wenang dan tidak memiliki nilai semaksimal mungkin. Itu dibatasi oleh memori yang tersedia. Python 3.x tidak memiliki tipe khusus untuk nilai yang tidak dapat direpresentasikan oleh integer mesin asli - semuanya intdan konversi ditangani di belakang layar.
Tidak seperti C / C ++ Long di Python memiliki presisi tak terbatas. Untuk informasi lebih lanjut, lihat bagian Jenis Numerik di python.Untuk menentukan nilai maksimal bilangan bulat, Anda bisa merujuk sys.maxint. Anda bisa mendapatkan detail lebih lanjut dari dokumentasi sys .
Judulnya adalah "Nilai maksimum untuk bilangan bulat panjang" , bukan nilai maksimum float. Jadi, tanpa penjelasan bagaimana ini menjawab pertanyaan, saya menganggap NAA ini (bukan jawaban).
Sнаđошƒаӽ
0
Di python3, Anda dapat mengirim nilai float ke dalam fungsi int untuk mendapatkan nomor itu 1.7976931348623157e + 308 dalam representasi integer.
Ini sama sekali tidak berguna. Untuk mengilustrasikannya, coba int (sys.float_info.max) +1 dan Anda hanya akan mendapatkan bilangan bulat yang merupakan satu lagi, karena seperti yang dijelaskan oleh komentar lain Python hanya menyimpan bilangan bulat presisi tak terbatas.
min
fungsinya, jika Anda benar-benar ingin memprogram dengan Python!)float("inf")
,. Atau lebih baik, gunakan fungsi built-inmin
.Jawaban:
Bilangan bulat panjang:
Tidak ada batasan yang ditentukan secara eksplisit. Jumlah ruang alamat yang tersedia membentuk batas praktis.
(Diambil dari situs ini ). Lihat dokumen tentang Jenis Numerik di mana Anda akan melihatnya
Long integers have unlimited precision
. Di Python 2, Integer akan secara otomatis beralih ke long ketika mereka tumbuh melebihi batasnya:untuk bilangan bulat yang kami miliki
maxint dan maxsize:
Nilai maksimum int dapat ditemukan di Python 2.x dengan
sys.maxint
. Itu telah dihapus dengan Python 3, tetapisys.maxsize
seringkali dapat digunakan sebagai gantinya. Dari changelog :dan, bagi siapa pun yang tertarik dengan perbedaannya (Python 2.x):
dan untuk kelengkapannya berikut versi Python 3 :
mengapung:
Ada
float("inf")
danfloat("-inf")
. Ini dapat dibandingkan dengan tipe numerik lainnya:sumber
Python
long
bisa sangat besar. Jika Anda membutuhkan nilai yang lebih besar dari nilai lainnya, Anda dapat menggunakannyafloat('inf')
, karena Python tidak kesulitan membandingkan nilai numerik dari jenis yang berbeda. Demikian pula, untuk nilai yang lebih rendah dari nilai lainnya, Anda dapat menggunakanfloat('-inf')
.sumber
Jawaban langsung untuk pertanyaan judul:
Bilangan bulat tidak terbatas ukurannya dan tidak memiliki nilai maksimum dalam Python.
Jawab alamat mana yang menyatakan kasus penggunaan yang mendasari:
Menurut komentar Anda tentang apa yang Anda coba lakukan, saat ini Anda sedang memikirkan sesuatu yang serupa
Itu bukan cara berpikir dengan Python. Terjemahan yang lebih baik untuk Python (tapi tetap bukan yang terbaik)
Perhatikan bahwa di atas tidak menggunakan MAXINT sama sekali. Bagian solusi itu berlaku untuk bahasa pemrograman apa pun: Anda tidak perlu mengetahui nilai setinggi mungkin hanya untuk menemukan nilai terkecil dalam sebuah koleksi.
Tapi bagaimanapun, apa yang sebenarnya Anda lakukan dengan Python itu adil
Artinya, Anda sama sekali tidak menulis satu lingkaran pun. Built-in
min()
fungsi mendapatkan minimal seluruh koleksi.sumber
long
ketik Python 2.x menggunakan aritmatika presisi sewenang-wenang dan tidak memiliki nilai semaksimal mungkin. Itu dibatasi oleh memori yang tersedia. Python 3.x tidak memiliki tipe khusus untuk nilai yang tidak dapat direpresentasikan oleh integer mesin asli - semuanyaint
dan konversi ditangani di belakang layar.sumber
Tidak seperti C / C ++ Long di Python memiliki presisi tak terbatas. Untuk informasi lebih lanjut, lihat bagian Jenis Numerik di python.Untuk menentukan nilai maksimal bilangan bulat, Anda bisa merujuk
sys.maxint
. Anda bisa mendapatkan detail lebih lanjut dari dokumentasi sys .sumber
Anda dapat menggunakan: nilai maksimum float is
untuk negatif
sumber
Di python3, Anda dapat mengirim nilai float ke dalam fungsi int untuk mendapatkan nomor itu 1.7976931348623157e + 308 dalam representasi integer.
sumber