Nieskończoność

Nieskończoność

Granica pomiędzy mało a dużo dla komputera nie jest tak rozmyta (nieokreślona) jak może się wydawać.

2**64 to nieskończenie dużo

Dla pojedynczego komputera wartość $2^{64}$ to jest nieskończona liczba. Natomiast wartość $2^{32}$ to jest bardzo mało.

  • Ilość RAM $2^{32}$ bajtów jest zerowany w mniej niż 1 sekundę. Ilość RAM $2^{64}$ bajtów jest zerowany przez 100 lat.
  • Pętla która robi $2^{64}$ nie skończy się w ciągu 100 lat.
  • Ilość danych wygenerowana przez ludzkość to więcej niż $2^{64}$, więc dla chmury obliczeniowej czy dużej serwerowni jest to siągalna liczba. Wtedy musimy przyjąć wyższą wartość nieskończoności: $2^{128}$.

Liczba ziaren piasku na plażach świata to 7.5e18 sztuk. To mniej niż $2^{64}$.

python
from math import log
log(7.5e18) / log(2)  # 62.7

2**-64 to zero

To około 9 odchyleń standardowych rozkładu normalnego.

from mpmath import mp
mp.dps = 50
mp.pretty=True
print(1-ncdf(9)) # 1.1e-19
print(2**-64) # 5.4e-20

Wylosuj 32 razy reszkę pod rząd (czas działania: kilka/kilkanaście sekund)

import numpy as np

for i in range(1000):
    a = np.random.randint(0,2**32, 100_000_000, dtype=np.uint32)
    if 0 in a:
        break
    print(i)

idx = np.where(a==0)[0][0]
list(a[idx-2:idx+3])  # [2957777043, 958089629, 0, 3150515941, 957238589]

Wylosuj 64 razy reszkę pod rząd (czas działania: kilka/kilkanaście tysięcy lat)

for i in range(1000):
    a = np.random.randint(0,2**64, 100_000_000, dtype=np.uint64)
    if 0 in a:
        break
    print(i)

idx = np.where(a==0)[0][0]
list(a[idx-2:idx+3])

Tabela szacowanego rozmiaru dla kolejnyh potęg 2

2^typ danychopis
1bitwyniki rzutu monetą
2
3wyniki rzutu kostą 6/8 sześcienną
4
5
6
7
8int8bajt (256 wartości) , 3 sigma
9
10
11
12
13
144 sigma
15
16int16
17
18
19ram w Atari65xe (64K) tyle bitów
20
215 sigma
22
23
24
25ludność Polski
26
27liczba sekund życia człowieka
28
296 sigma
30
31
32int32CD (700MB) liczba bitów
33liczba ludzi na świecie
34
35DVD (4.7GB)
36liczba neuronów w mózgu człowieka
liczba sekund od zasiedlenia Australii (50000 lat)
3716GB
3832GBliczba gwiazd w drodze mlecznej, 7 sigma
39
40
41256GBliczba galaktyk we wszechświecie
42
431TB
44liczba czerwonych krwinek u człowieka
45
468TB HDD
47
48
498 sigma
50
51
52
53
54liczba sekund od początku wszechświata
55
56
57
58
59
60
61
62
63liczba ziaren piasku na ziemi
64int64bezpieczny klucz kryptografii z tajnym kluczem , 9 sigma
65
66
67
68
69
70liczba gwiazd we wszechświecie
71
72
73
74
75
76
77
78
79liczba Avogadro (atomów w 12g węgla)
80
81
82
83
84
85liczba cząsteczek wody w litrze
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101liczba bakterii na świecie
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128int128md5 oraz klucz kryptografii publicznej/asymetrycznej
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154liczba cząsteczek wody na ziemi
155
156
157
158
159
160sha1
161
162
163
164
165
166liczba atomów na ziemi
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189liczba atomów w Słońcu
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224liczba atomów w drodze mlecznej
225liczba permutacji talii kart (52!)
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266liczba atomów we wszechświecie

2**32 to mało dla komputera

Czas działania ok. 1.31 sec:

python
from numba import njit

@njit
def fun():
    s = 0
    for i in range(2**32):
        s += i%10
    return s

%timeit res = fun()
print(res)

Moduł numba kompiluje kod Python przed wykonaniem.