みをつくしのひとりよがり

2022/08/10にブログ名を変えました.仕事や生活に役立ちそうな(実際に役立つかは別として)数学・物理ネタをつらつらと書いていこうと思ってます.

ケタに強くなる(対数)

対数です.そもそも対数は天文学の計算で,その威力を発揮しました.まさに「天文学的数字」を扱うときに便利だったということです.それは対数の基本でもある以下の式

  \log{(a \times b)} = \log{a} + \log{b}

  \log{(a \div b)} = \log{a} - \log{b}

によって,大きな数のかけ算・割り算が足し算・引き算に置き換えられたことによります.

他にも,指数関数的な関係を 1次関数的な関係に置き換えるといったことにも利用します(ex.片対数グラフにプロットすると,直線が現れる).

 

公式うんぬんよりも,対数の使い方

ここでは,対数のより実践的な使い方について書いていきます.対数の応用問題としてもよく登場する「ケタ数」の問題です.

 

では,問題です.

コンピュータネットワークでは,IPアドレスで端末を識別しています.現在幅広く用いられている IPアドレスは「192.168.1.200」のようなものであり,このアドレス体系をもつ規約(プロトコル)は「IPv4」と呼ばれています.10進法で表記されていますが,実際には 0と 1を 32個(32ケタ)並べたものとして表されます.言い換えれば,2進法で 32ケタ(32ビット)として表されているということです.

さて近年この IPアドレスが枯渇するということで「IPv6」という新しい規約が作られています.IPアドレスは 2進法で 128ケタ(128ビット)の数で表すことになります.まとめると,

  • IPv4では 32ビット表記であり,その組合せは  2^{32}とおり
  • IPv6では 128ビット表記であり,その組合せは  2^{128}とおり

ということになります.さて,扱える最大の端末数は何倍になるでしょうか?「おおよそ何ケタ増えるのか(10の何乗倍になるのか)」で答えてください*1

 

10の何乗倍か?に言い換える

単純に「何倍ですか?」と聞かれれば,

  2^{128} \div 2^{32} = 2^{96}

となって,「2の96乗倍です!」と答えられます.しかし,これではピンときませんね.そこで,

  2^{96} = 10^A ・・・(1)

と言い換えることを考えます.この式は指数で書かれていますが,左辺の「2」や右辺の「10」も,指数の「底」と呼ばれるものです.つまりは,「底の変換」をおこなってあげることになります.ここで両辺底を 10として対数をとります.

  \log_{10}{2^{96}} = \log_{10}{10^A}

  96 \times \log_{10}{2} = A \times \log_{10}{10}

  A = 96 \times \log_{10}{2}

ここで対数表より  \log_{10}{2} \fallingdotseq 0.3010という値を代入します.すると,

  A \fallingdotseq 96 \times 0.3010 = 28.896

となります.Aはそもそも (1式)の Aですから,

  2^{96} = 10^{28.896}

と言い換えられたということになります.

 

言い換えただけじゃダメ

この「 10^{28.896}」から,この数の構造を読み取らなければいけません.以下のような不等式を書けば,イメージが湧いてくるのでないでしょうか?

  10^{28} \lt 10^{28.896} \lt 10^{29}

 10^{28}とは「0が 28個つく」ということですから,ケタとしては 29ケタです.これがイメージしにくければ,一度 10^1(10の"1乗")= 10だから"2ケタ"になる」と思い出してみてください.もうちょっと砕いて書くと,

 (29ケタの先頭である 10…(0が 28個)…00)<  10^{28.896}< (30ケタの末尾である 10…(0が29個)…00)

ということですから,「 10^{28.896}は 29ケタの数」ということになります.

 

もうちょっと細かく

28.896はほとんど 29ですから,どちらかと言えば 29ケタの中でも後半の方になるはずです.そのあたりを調べてみます.そのためには,以下のように「分解」をします.

  10^{28.896} = \color{red}{10^{0.896}} \times 10^{28}

そして「 10^{0.896}」について考えます. \log_{10}{7} \fallingdotseq 0.8451, \ \log_{10}{8} = 3 \times \log_{10}{2} \fallingdotseq 0.9030より,

  \log_{10}{7} \lt 0.896 \lt \log_{10}{8}

  7 \lt 10^{0.896} \lt 8

ということで, 10^{0.896} \fallingdotseq 7.\cdotsと表されることになります.これを高校数学的な表現をすれば「最高位の数字は 7」ということになります.

 

実際,関数電卓を用いてみると,

  10^{28.896} = 10^{0.896} \times 10^{28} \fallingdotseq \color{red}{7.870} \times 10^{28}

となっています.

 

おまけ

最高位の数字がわかったので,最下位(1の位)の数字も考えてみましょう.これはかけ算の規則(周期性)を用います. 2^1 = 2から 2をかけ続けて,1の位に注目すると

 248 → 16 → 32 → 64 → 128 → 256 → 512 → ・・・

と周期性があることがわかります. 2^{128}については 128÷4= 32あまり 0なので,「1の位は 6」ということになります.

 

なかなか慣れないものではありますが,上のように「分解」するなど突っ込んだところを考えていくことで理解を深められるのではないかと思います.

最後に「小数第何位」の問題も基本的な考え方は同じです.ただし,10の何乗と小数第何位の対応が,上の場合とはちょっと違っているので注意が必要です.わかりにくいときは,「 10^{\color{red}{-1}} = 0.1だから小数第1位になる」と思い出してみてください.

*1:実際には,使えるアドレス範囲,使えないアドレス範囲(用途が限定されている等)があるので,このとおりとはなりません