Uzun tam sayı için maksimum değer


108

Uzun bir tamsayı için maksimum değeri bir değişkene, örneğin C ++ 'lara benzer şekilde nasıl atayabilirim LONG_MAX .


7
Python tam sayılarının sınırlı olduğundan emin değilim. Sys.maxint'i geçtiğiniz anda, dahili gösterimi int'ten uzun bir önseziye sahip olacak şekilde değiştirir.
48'de tchap

Bir değer grubu arasında tek tek bir minimum değer bulmam gerektiği için
sordum.Bu

2
Yorumunuza - dahili min. Fonksiyonu kullanmanızı tavsiye ederim.
Jiri

5
C ++ veya başka bir dilde programlama yapıyor olsanız bile, yalnızca minimum değeri bulmaya çalışıyorsanız maksimum değere ihtiyacınız yoktur. Yine de tüm öğeler arasında döngü yapacaksanız, başlangıç ​​değeriniz olarak yalnızca ilk öğeyi kullanın. (Ama mingerçekten Python'da programlamak istiyorsanız , işlevi kullanmak daha iyidir !)
John Y

3
@Sreevisakh: "büyük değer" için sonsuzu kullanın float("inf"). Veya daha iyisi, yerleşik minişlevi kullanın.
Fred Foo

Yanıtlar:


132

Uzun tam sayılar:

Açıkça tanımlanmış bir sınır yoktur. Kullanılabilir adres alanı miktarı pratik bir sınır oluşturur.
( Bu siteden alınmıştır). Bunu göreceğiniz Sayısal Türler hakkındaki dokümanlara bakın Long integers have unlimited precision. Python 2'de, Tamsayılar, sınırlarını aştıklarında otomatik olarak uzun değerlere geçiş yapar:

>>> import sys
>>> type(sys.maxsize)
<type 'int'>
>>> type(sys.maxsize+1)
<type 'long'>


sahip olduğumuz tamsayılar için

maxint ve maxsize:

Bir int'in maksimum değeri Python 2.x ile bulunabilir sys.maxint. Python 3'te kaldırıldı, ancak sys.maxsizebunun yerine sıklıkla kullanılabilir. Gönderen değişmek :

Sys.maxint sabiti, artık tamsayıların değerine yönelik bir sınır olmadığından kaldırıldı. Ancak, sys.maxsize herhangi bir pratik liste veya dize dizininden daha büyük bir tam sayı olarak kullanılabilir. Uygulamanın "doğal" tam sayı boyutuna uygundur ve genellikle aynı platformdaki önceki sürümlerdeki sys.maxint ile aynıdır (aynı derleme seçenekleri varsayılarak).

ve farkla ilgilenen herkes için (Python 2.x):

sys.maxint Python'un normal tamsayı türü tarafından desteklenen en büyük pozitif tam sayı. Bu en az 2 ** 31-1'dir. En büyük negatif tamsayı -maksint-1'dir - asimetri, 2'nin tamamlayıcı ikili aritmetiğinin kullanımından kaynaklanır.

sys.maxsize Platformun Py_ssize_t türü tarafından desteklenen en büyük pozitif tam sayıdır ve bu nedenle maksimum boyut listeleri, dizeleri, dicts ve diğer birçok konteyner olabilir.

ve eksiksizlik için işte Python 3 sürümü :

sys.maxsize Py_ssize_t türünde bir değişkenin alabileceği maksimum değeri veren bir tam sayı. Genellikle 32 bit platformda 2 ^ 31 - 1 ve 64 bit platformda 2 ^ 63 - 1'dir.

yüzer:

Orada float("inf")ve float("-inf"). Bunlar diğer sayısal türlerle karşılaştırılabilir:

>>> import sys
>>> float("inf") > sys.maxsize
True

Aynı kodu denedim ama yine de windows 64 bit makinede python 3'te int olarak türü gösteriyor. Bunun için değerli bir sebep.
ManojP

1
@ManojP Python 3'te artık tamsayıların boyutunda bir sınır olmadığı için. İlk blok alıntıya bakın. Örneğin Python 2 olduğunu açıklığa kavuşturmak için düzenleyeceğim
keyser

39

Python longisteğe bağlı olarak büyük olabilir. Diğer herhangi bir değerden daha büyük bir değere ihtiyacınız varsa, kullanabilirsiniz float('inf'), çünkü Python farklı türlerdeki sayısal değerleri karşılaştırmada sorun yaşamaz. Benzer şekilde, diğer herhangi bir değerden daha düşük bir değer için kullanabilirsiniz float('-inf').


1
bu yüzden çok büyük bir değer döndürüyor mu?
Sreevisakh

4
Herhangi bir sonlu sayıdan daha büyük olan kayan noktalı sonsuzluğu döndürür.
Taymon

4
Söylemeliyim ki, bu cevap OP'nin başlık sorusuna cevap verme açısından kesinlikle en yakın doğru cevaptır. Yani, "tüm girdilerinizden daha büyük olacak (veya en azından en büyük değerden daha küçük olmayacak) bir Python sentinel değerini nasıl elde edersiniz?". Bu yüzden bu cevaba olumlu oy verdim, ancak OP'nin bunun yerine Python'da düşünmeyi öğrenmesinin daha iyi olacağını düşünüyorum.
John Y

Kabul. Bununla birlikte, ihtiyacım olan şeyi yapmanın tek yolunun bu olduğu bir durumdaydım.
Taymon

21

Başlık sorusuna doğrudan cevap:

Tamsayılar boyut olarak sınırsızdır ve Python'da maksimum değere sahip değildir.

Temel kullanım durumunun belirtildiği adresleri yanıtlayın:

Yapmaya çalıştığınız şey hakkındaki yorumunuza göre, şu anda şu çizgide bir şeyler düşünüyorsunuz:

minval = MAXINT;
for (i = 1; i < num_elems; i++)
    if a[i] < a[i-1]
        minval = a[i];

Python'da böyle düşünmek bu değil. Python'a daha iyi bir çeviri (ama yine de en iyisi değil) olurdu

minval = a[0]  # Just use the first value
for i in range(1, len(a)):
    minval = min(a[i], a[i - 1])

Yukarıdakilerin MAXINT'i hiç kullanmadığını unutmayın. Çözümün bu kısmı herhangi bir programlama dili için geçerlidir: Bir koleksiyondaki en küçük değeri bulmak için mümkün olan en yüksek değeri bilmenize gerek yoktur.

Her neyse, Python'da gerçekte yaptığınız şey

minval = min(a)

Yani, hiç döngü yazmıyorsunuz. Yerleşik min()işlev tüm koleksiyonu minimum yapan.


8

longPython 2.x'de type, keyfi kesinlik aritmetiği kullanır ve olası maksimum değer diye bir şey içermez. Kullanılabilir hafıza ile sınırlıdır. Python 3.x, yerel makine tamsayısı ile temsil edilemeyen değerler için özel bir türe sahip değildir - her şey vardır intve dönüşüm perde arkasında işlenir.


7

Python'daki C / C ++ Long'un aksine sınırsız hassasiyete sahiptir. Daha fazla bilgi için python'daki Sayısal Türler bölümüne bakın sys.maxint. Tam sayının maksimum değerini belirlemek için başvurabilirsiniz . Sys belgelerinden daha fazla ayrıntı alabilirsiniz .


1

Şunu kullanabilirsiniz: maksimum float değeri

float('inf')

olumsuz için

float('-inf')

2
Başlık, float'ın maksimum değeri değil, "Uzun tamsayı için maksimum değer" dir . Yani, bu nasıl bir açıklama yapmadan cevap soru, bu NAA (değil bir cevap) görüyoruz.
Sнаđошƒаӽ

0

Python3'te, float değerini int fonksiyonuna gönderebilir ve 1.7976931348623157e + 308 sayısını tamsayı olarak gösterebilirsiniz.

import sys    
int(sys.float_info.max)

Bu hiç yararlı bir şey yapmaz. Bunu göstermek için, int (sys.float_info.max) + 1'i deneyin ve bir tane daha olan bir tamsayı elde edersiniz, çünkü diğer yorumların da açıkladığı gibi Python yalnızca sınırsız hassas tamsayılar depolar.
tialaramex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.