8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

2の256乗(2^256)は10進数で何桁か

Last updated at Posted at 2019-03-07

2の256乗は10進数で何桁の数なのか知りたい。

知りたい理由

仮想通貨(例えばBitcoin)では、256bit(2^256)の乱数(つまり2^256パターンの中から)からアドレスが生成されます。
乱数からアドレスを生成すると聞くと「え、重複しないの?」という疑問がわきます。それに対する回答は、

2^256は十分に大きい数だから重複しません(但し、エントロピーが十分な場合)

という回答になるのですが、2^256がどのくらいの数字か説明に苦労します。
せめて10進数で何桁か?くらいは説明したいものです。

方針

10進数で何桁か?というのは10の何乗程度の数字なのか?を求めればよい。

例えば、125は、

1.25 \times 10^{2}

と表すことができるため、2桁であることがわかる。
今回は桁数だけわかればいいので、2^256が、

X \times 10^{n}

と表される場合のnを求めれば良い(Xの数字は不要)。

道具1

まず、利用するのは下記の関係式。10進数において以下の関係式が成り立つ。

10^{n-1} \leqq A < 10^{n} \Leftrightarrow n-1 \leqq \log_{10} A < n

つまり、

10^{n-1} \leqq 2^{256} < 10^{n} \Leftrightarrow n-1 \leqq \log_{10} (2^{256}) < n

という関係が成り立つということなので、

\log_{10} (2^{256})

が求められればおおよその桁数がわかるということになる。

解説はこことか見るといいでしょう。勉強になります。

道具2

結論から先にいえば、

\log_{10} (2^{256})

は、底の変換公式

\log_a X = \log_b X / \log_b a

により、下記のように変換できる。

\log_{10} (2^{256}) = \log_{2} (2^{256}) / \log_{2} 10

底を2の式に変換している。理由は後々計算しやすいから(特にlog2 2^256の方)。解説はここ

また、

\log_{2} 10

は、

\log_a X = 1 / \log_x a

という関係式により、

1 / \log_{10} 2

と変換できるため、

\log_{10} (2^{256}) = \log_{2} (2^{256}) * \log_{10} 2

と表現することができる。
ここで、

\log_{2} (2^{256})

は、2をn乗した場合に2^256になる数なので、そのまま256であることがわかる。
また、

\log_{10} 2

は、常用対数表から、0.301なのがわかる。
そのため、最終的に、

\log_{10} (2^{256}) = 256 * 0.301 = 77.056

となり、桁数nは、

n-1 \leqq 77.056 < n

あたりということになる。

Googleで「2の256乗」と検索すると、1.1579209e+77と出ますね。

これは「宇宙にある陽子の数」とされるエディントン数(136 * 2^256)に近い数字であり、膨大な数だということがわかります。

現在、エディントン数はやや補正されているようです。

応用

IPアドレスの枯渇

IPアドレス(正確にはIPv4)は192.168.111.111などと、32bitで表される一意な数字である。
つまり、2^32パターンのアドレスが存在することになる。これは、10進数でどれくらいの数だろうか?

上記の関係から2^32の桁数は、

\log_{10} (2^{32}) = 32 * 0.301 = 9.623桁の数

となる。これは、実際には42.9億程度の数である。これでは、世界人口70億人が一人1台スマホを保有した場合、アドレスが割り振りきれないのがわかります。

そこで、桁数を増やしたのがIPv6。IPv6では、アドレスが128bit、つまり2^128パターンに拡張されました。
では、これは何桁くらいの数でしょか?

\log_{10} (2^{128}) = 128 * 0.301 = 38.528桁の数

となります。これは、IPv4の約43億個に43億 x 43億 x 43億を更に掛けたくらいの量となり、十分な数となる。

2の累乗

お気づきかと思いますが、2の累乗が何桁なのかは、

2^{n}が何桁か? = n * 0.301

で求めることができるということです。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?