Mimo, że 17! wykracza znacznie poza zakres liczb, które można przedstawić za pomocą 32-bitów, zdefiniowana przez nas funkcja zwróciła poprawną wartość. Jest to możliwe dzięki temu, że Python automatycznie dokonał konwersji między swoim podstawowym a rozszerzonym typem całkowitym. O tym, że mamy do czynienia z typem long int, informuje nas dołączona do liczby litera L
GNU Octave
GNU Octave nie ma specjalnego typu danych dla liczb całkowitych. Wszystkie liczby przechowywane są jako 64-bitowe liczby zmiennopozycyjne (patrz następny podrozdział). Maksymalna wartość możliwa do przedstawienia przechowywana jest w zmiennej wbudowanej realmax, a wyjście poza zakres traktowane jest jako nieskończoność:
octave:l> realmax realmax = 1.7977e+308
octave:2> 2*realmax ans = Inf
Najczęściej obecnie stosowanym sposobem zapisu liczb rzeczywistych na komputerach jest reprezentacja zmiennoprzecinkowa [31]1. W reprezentacji tej liczba przedstawiona jest za pomocą bazy B oraz precyzji (ilości cyfr) p. Jeśli np. B = 10 i p — 3, wówczas liczba 0.1 będzie miała postać 1.00 x 10-1.
Ze względu na skończoną dokładność (ilość bitów) nie wszystkie liczby rzeczywiste dadzą się przedstawić dokładnie. Dla B = 2 i p = 24 liczba 0.1 będzie miała np. tylko reprezentację przybliżoną
1.10011001100110011001100 x lO-4.
Ogólnie, liczba zmiennopozycyjna w bazie B i precyzji p ma postać:
±d.dd... d x Be, (2.5)
gdzie mantysa d.dd... d map cyfr. Bardziej dokładnie, powyższy zapis oznacza:
± (do + d^B-1 + ■ • ■ + dp-iB-k-1') x Be,
gdzie 0 < di < B. Oczywiście, reprezentacja zmiennopozycyjna liczby nie musi być jednoznaczna. Na przykład, obie liczby 0.01 x 101 i 1.00 x 10-1 przedstawiają liczbę 0.1 w bazie B = 10 i precyzji p = 3. Dlatego wprowadza się pojęcie reprezentacji znormalizowanej, w której do ^ 0. 1 tak 1.00 x 10-1 jest znormalizowaną reprezentacją liczby 0.1, natomiast 0.01 x 101 nią nie jest.
Wymóg, aby reprezentacja była znormalizowana, czyni ją jednoznaczną, wprowadza jednak pewien problem. Otóż niemożliwym staje się przedstawienie zera w naturalny sposób. W takim wypadku przyjmuje się najczęściej, że 0 reprezentowane jest przez 1.0 x Bemin~1.
17
0 innych sposobach można przeczytać np. w [32,33]