Datentyp in Python für sehr hohe Zahlen?

...komplette Frage anzeigen

2 Antworten

Gib mal folgendes in deine Python-Konsole ein:

import sys
sys.maxint

Du erhältst damit den maximalen Integer-Wert des regulären Integer Types von Python (32bit, bzw. 2^31 -1 = 2147483647). Das ist aber nicht die höchste Zahl, die du in Python erzielen kannst! Wird die Zahl größer als das, interpretiert Python den Datentyp als "Long", der in dem Fall nicht wirklich gedeckelt ist (außer vielleicht durch Speicherplatz der Festplatte).

Python hat eine andere Obergrenze, die sich an dem C-Typ "size_t" orientiert. Diese findest du über:

sys.maxsize

Bei einer 64bit-Maschine müsste das dementsprechend 9223372036854775807 ergeben (2^63 - 1). Diese Zahl reglementiert z.B. die maximale Anzahl an Elementen in einer Liste oder einem Dictionary.

Über den Datentyp "Float" kannst du ein bisschen tricksen. Durch die Exponentialschreibweise wird die Zahl quasi "abgekürzt" und braucht somit weniger Speicherplatz, obwohl sie eigentlich größer ist als sys.maxsize. Der höchste erlaubte Float liegt bei 1.7976...e+308, also quasi eine Zahl mit 308 Stellen. Nachlesen kannst du das über den Befehl

sys.float_info.max

Zu deinem Problem:

3! = 6  (3 * 2 * 1)

6! = 720 (6 * 5 * 4 * 3 * 2 * 1)

720! = 2601218943565795100204903227081043611191521875016945785727541837850835631156947382240678577958130457082619920575892247259536641565162052015873791984587740832529105244690388811884123764341191951045505346658616243271940197113909845536727278537099345629855586719369774070003700430783758997420676784016967207846280629229032107161669867260548988445514257193985499448939594496064045132362140265986193073249369770477606067680670176491669403034819961881455625195592566918830825514942947596537274845624628824234526597789737740896466553992435928786212515967483220976029505696699927284670563747137533019248313587076125412683415860129447566011455420749589952563543068288634631084965650682771552996256790845235702552186222358130016700834523443236821935793184701956510729781804354173890560727428048583995919729021726612291298420516067579036232337699453964191475175567557695392233803056825308599977441675784352815913461340394604901269542028838347101363733824484506660093348484440711931292537694657354337375724772230181534032647177531984537341478674327048457983786618703257405938924215709695994630557521063203263493209220738320923356309923267504401701760572026010829288042335606643089888710297380797578013056049576342838683057190662205291174822510536697756603029574043387983471518552602805333866357139101046336419769097397432285994219837046979109956303389604675889865795711176566670039156748153115943980043625399399731203066490601325311304719028898491856203766669164468791125249193754425845895000311561682974304641142538074897281723375955380661719801404677935614793635266265683339509760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  ( 720 * 719 * 718 * ... * 1)

Du versuchst ernsthaft von dieser ^^^^^^^^  Zahl den faktoriellen Wert zu berechnen? Klar, dass das nicht funktioniert ;). Das Ergebnis für 720! hat übrigens 1747 Stellen und hat eine Tiefe von 6400bit (=800byte).

Was möchtest Du wissen?