Rozważ, że mam 30-bitową pamięć RAM, aby obliczyć jej rozmiar: 2 ^ 30 = 1073741824/10 ^ 9 = 1 GB
Co jeśli mam na przykład 512 MB pamięci RAM, czy istnieje formuła do konwersji n-bit
? to może być pytanie nooba, ale nie jestem dobry z matematyki: /
Rozważ, że mam 30-bitową pamięć RAM, aby obliczyć jej rozmiar: 2 ^ 30 = 1073741824/10 ^ 9 = 1 GB
Co jeśli mam na przykład 512 MB pamięci RAM, czy istnieje formuła do konwersji n-bit
? to może być pytanie nooba, ale nie jestem dobry z matematyki: /
Odpowiedzi:
Szukasz logarytmu , w szczególności logarytmu podstawowego. Logarytmy robią odwrotnie niż potęgowanie, więc jeśli b x = y, to x = log b y. 2 4 = 16, więc log 2 16 = 4.
Najpierw musisz dowiedzieć się, ile bajtów masz. Jeśli twój numer jest w kilobajtach, pomnóż przez 2 10 . Dla megabajtów, 2 20 , dla gigabajtów 2 30 i tak dalej. Jak widać, używam definicji potęg-1024 tych jednostek, a nie definicji potęg-1000, więc jeden kilobajt to 1024 bajty. Jednoznaczna nazwa 1024 bajtów to kibibajt . W każdym razie 512 MB to 512 • 2 20 = 536870912 bajtów.
Teraz potrzebujesz kalkulatora naukowego. Lubię Wolfram Alpha , która umożliwia wykonywanie dwóch logarytmów podstawowych za pomocą log2
funkcji. log2(536870912)
daje 29, co ma sens, biorąc pod uwagę, że 512 MB to połowa 1 GB, więc potrzeba o jedną moc mniejszą od dwóch. W wyrażeniu Wolfram Alpha można użyć praktycznie dowolnego operatora, który można sobie wyobrazić, więc log2(512 * 10^20)
też działa .
Jeśli otrzymasz liczbę z częścią dziesiętną, zaokrąglij w górę. Na przykład potrzebujesz trzech bitów, aby zaadresować pięć bajtów pamięci RAM, choć log2(5)
jest to w przybliżeniu 2,32.
log2(536870912)
dobrze ocenia .
log(536870912) / log(2)
można wspomnieć w przypadku, gdy log2()
jest niedostępny.
[math]::Log(536870912, 2)
. Lub echo "l(536870912)/l(2)" | bc -l
lubpython -c 'import math; print math.log(536870912, 2)'
Oprócz tego, co powiedział Ben, zalecam najpierw wykonać logarytm liczby bez jednostek
log₂512 = 9
A następnie weź pod uwagę jednostki: suma 10 dla kibibajtów, 20 dla mebibajtów, 30 dla gibibajtów, ...
9 + 20 = 29
I to wszystko. Nie trzeba obliczać wielkich liczb. Jest tak, ponieważ logarytmy mają następujące właściwości:
logₙ(a × b) = logₙ(a) + logₙ(b)
logₙ(aᵇ) = b × logₙ(a)
W związku z tym,
log₂(512 × 2²⁰) = log₂(512) + 20
Jeśli jednak już wiesz log₂(1 GiB) = 30
,
log₂(512 MiB) = log₂(1 GiB / 2) = log₂(1 GiB) - log₂(2) = 30 - 1 = 29