Naprawdę duże liczbyProgramując, rzadko mamy do czynienia z bardzo dużymi wartościami. Dowodem na to jest choćby fakt, że 32-bitowe systemy dopiero teraz zaczynają być w zauważalny sposób zastępowane 64-bitowymi. Jedynie w przypadku rozmiarów bardzo dużych plików operowanie zmiennymi mogącymi zmieścić wartości większe niż 4 miliardy jest konieczne.
Inne dziedziny życia i nauki przynoszą nam nieco większe wartości. Ekonomia czasami mówi o dziesiątkach bilionów (PKB dużych krajów), a fizyka często posługuje się wielkościami zapisywanymi przy pomocy notacji potęgowej - aż do ok. 1080, czyli szacowanej liczby wszystkich atomów we Wszechświecie.
Wydawać by się mogło, że wielkość ta jest bliska górnej granicy wartości, jakich kiedykolwiek moglibyśmy używać w sensownych zastosowaniach. Okazuje się jednak, że tak nie jest; co więcej, jakakolwiek liczba zapisana za pomocą co najwyżej potęgowania jest tak naprawdę bardzo, bardzo mała.
Do zapisywania naprawdę dużych liczb potrzebne są bowiem inne notacje. Jednym z takich sposobów zapisu jest notacja strzałkowa Knutha, która jest "naturalnym" rozszerzeniem operacji algebraicznych. Tak jak dodawanie jest iterowaną inkrementacją, mnożenie jest iterowanym dodawaniem, a potęgowanie - iterowanym mnożeniem:


,
tak każdy następny operator strzałkowy jest iterowaną wersją poprzedniego. I tak pierwszy z nich,
to zwykłe potęgowanie
, ale już drugi:

jest odpowiednikiem wielokrotnego podnoszenia danej liczby do jej potęgi. W ogólności, skracając ciąg n strzałek do
, otrzymujemy definicję:

Na pierwszy rzut oka może wydawać się to nieoczywiste, jednak już dla n = 3 i jednocyfrowych argumentów, wielkość liczb otrzymywanych przy użyciu notacji strzałkowej znacznie przekracza te, które można w wygodny sposób zapisać przy pomocy samego potęgowania. Chcąc je mimo wszystko przedstawić w tej postaci, trzeba się uciekać do sztuczek z klamerkami:

Oczywiście wraz ze wzrostem liczby strzałek nawet takie triki przestają wystarczać.
W tej chwili pewnie nasuwa się proste pytanie: czy z takiego systemu zapisu jest w ogóle jakiś pożytek, jeśli nikt nie posługuje się na poważnie tak wielkimi liczbami?... Odpowiedź jest jak najbardziej twierdząca, mimo że założenie w pytaniu jest nieprawdziwe. Otóż niektóre dziedziny matematyki używają nie tylko takich, ale i znacznie większych wartości - i nie chodzi tu nawet o teorię liczb, którą to jako pierwszą podejrzewalibyśmy o rzucanie liczbami "z kosmosu".
Według Księgi Rekordów Guinnessa największą skończoną liczbą kiedykolwiek użytą w poważnym dowodzie matematycznym jest bowiem tzw. liczba Grahama, będącą górnym ograniczeniem pewnej wielkości występującej w problemie luźno związanym z grafami. Żeby ją zdefiniować, można użyć notacji strzałkowej - trzeba to jednak zrobić... iteracyjnie, wprowadzając pomocniczy ciąg gn:

Już pierwszy jego wyraz nie daje się zapisać w postaci potęgowej, ale gwoździem programu jest zauważenie, że kolejne jego elementy posługują się poprzednimi w celu określenia liczby strzałek w operatorze
. Innymi słowy, mamy tu wejście na kolejny poziom abstrakcji i stoimy już chyba tak wysoko, że aż strach spoglądać w dół ;)
Co jednak ze wspomnianą wcześniej liczbą Grahama? Teraz na szczęście jej określenie jest już bardzo proste. Jest ona równa ni mniej, ni więcej, jak tylko... g64 :-)
Karolu, "naprawdę duże liczby" powinno oznaczać duże liczby, a nie takie karły jak liczba Grahama...
Czy taki tekst jak ten w komentarzu powyżej ma jakikolwiek sens, oprócz popisania się jaki to autor jest fajny, obcykany w matematyce i w ogóle wszedł na Nty poziom abstrakcji?
Każdy moze sobie rzucić taki komentarz, bo to w sumie nic nie znaczy.
A notka ciekawa, jak zwykle na tym blogu :)
Daj spokój Alton...
Dla Aithne dzień bez
http://dzizas.blogspot.com/2009/09/pierd.html
to dzień stracony...
Jakby taki nasz gamedevowy ... Palikot :P
No i niech lepiej sama założy bloga i niech pisze na nim ciekawsze rzeczy
Jeśli takie liczby są jeszcze za małe.. zawsze można użyć czegoś, co, jeśli dobrze pamiętam, nazywa się "nadsilnią":

Taka ciekawostka zapamiętana z czasów studienckich.. ciekawe czy z tamtych czasów jeszcze składnię TeXa dobrze pamiętam :D
Podglądu posta niestety nie ma więc nie ręczę za poprawność.. jakby co to: n$ = n!^n!^n!.. i tak n! razy. Koszmarne wartość już przy 3$.
Niestety niespecjalnie pamiętasz, musiałem poprawić :) (Nawias dolny robi się przez \underbrace{wyr. na górze}_{wyr. na dole})
A co do tej "nadsilni", to rzeczywiście na pierwszy rzut oka robi wrażenie. Ale tylko na pierwszy :) Notacja strzałkowa daje bowiem większe liczby, co pokusiłem się nawet udowodnić :> Jak?
Przede wszystkim wiemy, że:

wobec czego:

Jeśli teraz pozbędziemy się tych nawiasów, to otrzymamy nawet większą liczbę:

(bo
już dla
).
Takie piętrowe potęgowanie tych samych liczb wygląda znajomo - i istotnie, to nic innego jak:

a jeśli nie chcemy w ogóle potęgowania, to po prostu:

Tak więc n$ można ograniczyć z łatwością przez proste wyrażenie używające notacji strzałkowej - c.b.d.o. :) Dodam jeszcze, że wszystkie nierówności występujące tutaj są bardzo zgrubnymi ograniczeniami :] W sumie więc relacja n$ do strzałek wygląda mniej więcej tak:

Czyli n$ jest między dwiema a trzema strzałkami :)
Kiedyś po prostu na pewnym forum (bodajże forum FASMa to było) zrobili sobie zabawę polegającą na podaniu jak największej liczby w dziewięciu znakach, a że padały tam znacznie większe liczby, to G wydaje mi się małe... Tu jest sporo o dużych liczbach. Naprawdę dużych.
Aithne: G rzeczywiście nie jest duże w porównaniu chociażby do wartości funkcji busy-beaver dla odpowiednio dużych argumentów. Jednak o ile po np. BB(100) tej wielkości w ogóle nie widać, tak zagnieżdżona rekurencyjna definicja G - w której kolejne elementy ciągu służą jako rząd i tak już dającego gigantyczne rezultaty operatora - jest pod tym względem o wiele bardziej sugestywna.
Znaki nowej linii dodawane są automatycznie.
Do wstawiania kodu użyj [code][/code], a do wzorów (w LaTeX-u) [tex][/tex].
Dozwolne tagi HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>