🦐

指数を自在に操って大きい数字や小さい数字を自信もって処理できるようになろうぜ(応用情報例題つき)

2021/10/28に公開

はじめに

今秋(2021年)、応用情報技術者試験を受験しました。午前の解答を自己採点したり午後問題のスレを眺めつつ検算したりして、まあたぶん受かったな、いえーい^^ という気持ちです。

それで、それらのスレを見てたら、僕が思ってるより、計算問題、特に指数の扱いを苦手としている人が多いなという印象を受けました。

というわけで、そういう人たち向けに「指数の操作方法わかったら楽だぜ」という話を書いてみます[1]

想定対象読者

  • 大きい数字や小さい数字の計算がどうにも苦手な人。
  • ITパスポートや基本情報や応用情報を取ろうとしているけど、計算問題がいまいち解けない人。
  • 数学が嫌い。指数とかなんなの? もっと簡単に説明しろ、と思っている人。

指数表記について

一歩一歩いきましょう。

ここに、10 という数があります。10 です。
ここに、10 \times 10 という数があります。10 \times 10 なので100です。
ここに、10 \times 10 \times 10という数があります。10 \times 10 \times 10 なので1,000です。
ここに、10 \times 10 \times 10 \times 10という数があります。10 \times 10 \times 10 \times 10なので10,000です。

いいかげんうっとうしいので、10をx個(あるいはx回)かけ算した数を10^{x}と書くことにしましょう。なので、10^{1}=10,\ 10^{2}=100,\ 10^{3}=1,000, ... こういう感じになります。
そうすると、「100億 = 1,000,000,000」とかデカい数字になっても、この表記方法なら10^9と書けて楽です。こういうの、累乗って呼ぶんでしたね。
別の視点で見ると、10^{x}は、0が x個ならんでいることを示しているとも言えます。だって、10^{1}なら10で0が1個でしょう? 10^{2}なら100で0が2個でしょう?

さてそれで、ちょっとごめんなさい。どうしてもこのあと使いたいから言葉の定義をさせてください:

  • かける数(ここまでだと「10」)のことを底(てい) と呼びます。
  • 底の右上につけるかける個数あるいは回数(ここまでだと「1」とか「2」とか「3」とか)のことを指数と呼びます
    • つまり、たとえば10^{12}の場合は、底が10で、指数が12ってことですね。

それで、ある数x(つまり底)同士を、ある数y(つまり指数)回かけ算して、それをx^{y} と表記する書き方を指数表記と言います。

指数表記を恐れる必要は全くありません。だって、結局は、「底を指数の数だけ掛け算した数」 に過ぎないからです。10^{12}って書かれても、「あー、はいはい、0を12個ならべるのね。ってことは実体としては1,000,000,000,000か。1兆かー」と思えばいいだけの話です[2]

ただ、「1兆」という言葉は日本人にしか通じないし、「1,000,000,000,000」って書くのは長くてだるいし、だったら世界共通ルールで10^{12}って書いた方が楽じゃね? って感じで指数表記です。

それではちょっとした問題です。2^{6}は、普通に書くといくつでしょう? ぜんぜん電卓使って構いません。電卓の2を押して「×」を押したのちにまた2を押して、……というのを繰り返していけば数が出るはずです。答え: 64。合ってたらここまでの話は分かってるってことで大丈夫です。

それで指数法則について

さて、次の式を指数法則って呼びます:

x^{m} \times x^{n} = x^{m+n}

は? ってなったと思いますが、もうちょっとだけ読んでから離脱するか否かを決めて。

まず、xが底で、mとかnは指数だというのは許せると思います。さっきそう決めたし。それで、xは10としてみよう。mは1でいいや。nは2にしとこう。そうしたら、上の式は、10^{1} \times 10^{2} = 10^{1+2} ということになります。

左辺は、10^1 × 10^2 = 1,000 です。右辺は、10^{(1+2)} = 10^3 = 1,000 です。ということは、どっちも数としては1,000だから、この式はちゃんとイコールになってて何も間違ってないですね。

うすぼんやり気付いたかもしれませんが、ぶっちゃけ言うと、この指数法則って、めっちゃ当たり前なこと言ってるだけです。同じ数(底)をm回かけた数と、n回かけた数、その2つの数をかけ合わせたら、そりゃ底を(m+n)回かけた数になるわ、というだけです。

たとえば、

  • 10^{2} \times 10^{2} だとして、そりゃ、100に100をかけたら10,000なわけで、10,000を指数表記したら10^{4}だ。
  • 2^{2} \times 2^{4} だとして、そりゃ、4に16をかけたら64なわけで、64を指数表記したら2^{6}だ。

上の例に限らず、他の数で試してみても同じになります。おヒマならほかの例も試してみてください。指数法則、めっちゃ当たり前じゃん!!!! と思えたタイミングで次の説へお進みください。

底を2にするときと、10にするときと

底は、ITの分野だと、2か10が入ることが多いです。本筋からは外れるので、「なんで?」と思った場合は脚注を読んでください[3]

底を2にするときの指数について(ここは読み飛ばし可)

底を2にして、指数を1~16くらいまでにして計算してみましょう。こんな感じ。

指数 指数表記
1 2^{1} 2
2 2^{2} 4
3 2^{3} 8
4 2^{4} 16
5 2^{5} 32
6 2^{6} 64
7 2^{7} 128
8 2^{8} 256
9 2^{9} 512
10 2^{10} 1,024
11 2^{11} 2,048
12 2^{12} 4,096
13 2^{13} 8,192
14 2^{14} 16,384
15 2^{15} 32,768
16 2^{16} 65,536

この表の内容を覚える必要はないです。もしも必要になればそのつど電卓を使って計算すればいいんです。でもね、なぜかIT系の強いやつらはこの表の右半分を隠してもぜんぶ即答できるんですよね。怖い。業務上、何かと使う機会が多いからだとは分かるけど……。

底を10にするときの指数法則について(こっちは読んでほしい)

底を10にして、同じような表を作ってみましょう。

この表については、覚えてほしい箇所がある。IT業界に進むにせよ、そうでないにせよ、きっとどこかで役に立つ。特に、表の中で「表し方」とラベルをつけている箇所が重要。これは国際的なルールとして、 たとえば、10^{3} = 1,000は、1kと表現していいことになっています。kはキロと読む。まさに、1,000gの重さのものを1kgと表現するときの"k"です。こんなふうに、10^3, 10^6, 10^9 ... あたりの値は、特別な英字で略していいことになっていて、IT系の日常でも試験でも、前提知識として扱われます[4]

指数 指数表記 日本語 表し方
1 10^{1} 10 -
2 10^{2} 100 -
3 10^{3} 1,000 k(キロ)
4 10^{4} 10,000 -
5 10^{5} 100,000 十万 -
6 10^{6} 1,000,000 百万 M(メガ)
7 10^{7} 10,000,000 千万 -
8 10^{8} 100,000,000 -
9 10^{9} 1,000,000,000 十億 G(ギガ)
10 10^{10} 10,000,000,000 百億 -
11 10^{11} 100,000,000,000 千億 -
12 10^{12} 1,000,000,000,000 T(テラ)
13 10^{13} 10,000,000,000,000 十兆 -
14 10^{14} 100,000,000,000,000 百兆 -
15 10^{15} 1,000,000,000,000,000 千兆 P(ペタ)

ちょっと実践してみようか

ここまでの知識を使って、ちょっとした例題を解いてみましょう。
これは、「応用情報技術者試験」という割と難しい方のIT関係の国家資格の問題をちょっと改題したものです[5]。ここまでの知識があれば割と楽に解けます。

問題: 800×600のサイズで1画素あたり3バイトの画像を、1秒間に20枚、2分間撮影して動画にしたい。この場合、動画のサイズは何Gバイトになるか。

つまるところ、縦横サイズが800x600で、よくわからんけど1ピクセルずつ3バイトってことは画像1枚が 800 \times 600 \times 3っていうサイズになるってこと? それを1秒に20枚ずつ、2分で120秒撮るってこと? だったら、こういう感じでかけ算していけばよさそう:

800 \times 600 \times 3 \times 20 \times 120

電卓が使えれば一瞬なんですけどね。この試験、電卓禁止なんですよ。それにもし電卓が使えたとしても出てくる答えは3456000000で、これ結局何ケタなん? うざ…… みたいな気持ちになります[6]

さて、ここで、たとえば800って、8 \times 100とも書けます。そういう感じで上の式を指数表記にすると、

8 \times 10^2 \times 6 \times 10^2 \times 3 \times 2 \times 10^1 \times 1.2 \times 10^2

と書けるわけです。底が10のところを集めて指数法則を使えば、

8 \times 6 \times 3 \times 2 \times1.2 \times 10^{2+2+1+2} = 8 \times 6 \times 3 \times 2 \times 1.2 \times 10^{7}

残念だけど、指数表記じゃないところの数字は計算するしかない。345.6になった。345.6は、3.456 \times 10^2とも書けるから、

3.456 \times 10^{2} \times 10^{7} \simeq 3.5 \times 10^{2+7} = 3.5 \times 10^{9}

10^{9}はギガGだったので、3.5Gバイトが答えとなります。

もうちょっと指数法則について考えてみよう

上の例題を解いて、指数法則便利じゃん! とか 指数法則完全にわかった! と思ってもらえていたら、とても嬉しい。

しかし、指数法則がこれから猛威を振るう。猛威を振るうのだが、僕たちは、指数法則は絶対に間違っていない という立場を取ることをここで約束しよう。わけわかんねーよってなっても、指数法則さんが言うなら正しいんだ、という態度で行こう。よし、いくぞ。

底がなんであれ、指数が0のとき、その数は1である。

いきなり殴りつけてごめん。
でもね、指数法則を信ずるのであれば、これは簡単に説明ができる。

指数法則はこうだった:

x^{m} \times x^{n} = x^{m+n}

ここまで、mやらnやらはなんとなく正の数として扱っていた。だけど、じゃあn=0だったらどうよ。

\begin{aligned} x^{m} \times x^{0} &= x^{m+0} \\ x^{m} \times x^{0} &= x^{m} \end{aligned}

これって、両辺をx^{m}で割ったら、

x^{0} = \frac{x^{m}}{x^{m}} = 1

こうなるってことだ。つまり、x^{0}=1だ。

0乗が1になるとか意味わかんねえ!! と言いたい気持ちはよくわかるのですが、僕たちは、指数法則は絶対に間違っていない という立場を取るのであった。指数法則さんが「底xがなんであれ、指数が0ならその数は1である」と言うなら従うしかない。そうだ、2^{0}も、10^{0}も、1なのだ。

底がなんであれ、指数が負の数のとき、その数は底の逆数を累乗した数である。

また殴りつけてごめん。
でもね、指数法則を信ずるのであれば、これも説明ができる。0乗よりはちょっと難しい。

もう1回指数法則を書く:

x^{m} \times x^{n} = x^{m+n}

ここで、n=-mであるとしてみよう。すると、

x^{m} \times x^{-m} = x^{m-m} = x^{0}

ということになる。さっき見たとおり、0乗は1だから、上の式は、

x^{m} \times x^{-m} = 1

ということになって、これって、両辺をx^{m}で割ったら、

x^{-m} = \frac{1}{x^{m}}

ということになる。

負の数を指数にするのがそもそも意味わかんねえし、それがこうなるのも意味わかんねえ!! と言いたい気持ちはよくわかるのですが、僕たちは、指数法則は絶対に間違っていないという立場を取るのであった。指数法則さんが「底xがなんであれ、指数が負の数のとき、その数は底の逆数\frac{1}{x}を累乗した数である」と言うなら従うしかない。

そう、だからたとえば、10^{-1} = \frac{1}{10} = 0.1 ということになる。10^{-2} = \frac{1}{10^2} = 0.01 である。ほかにも考えてみると、2^{-1} = \frac{1}{2} = 0.5 だし、これは、5 \times 10^{-1} と書いてもなんら問題ないこともわかる。

底を10にするときの指数法則について(拡張版)

さて、底に対して指数を0にしたときと負の数にしたときにどうなるかを見ました。この記事の真ん中あたりで見た、10を底にするときの表を拡張してみよう。やっぱりここでも、指数の数と「表し方」との対応は覚えておいてほしい。日本語はおまけ。

指数 指数表記 日本語[7] 表し方
-15 10^{-15} 0.00000000000001 須臾 f(フェムト)
-14 10^{-14} 0.00000000000001 逡巡 -
-13 10^{-13} 0.0000000000001 模糊 -
-12 10^{-12} 0.000000000001 p(ピコ)
-11 10^{-11} 0.00000000001 -
-10 10^{-10} 0.0000000001 -
-9 10^{-9} 0.000000001 n(ナノ)
-8 10^{-8} 0.00000001 -
-7 10^{-7} 0.0000001 -
-6 10^{-6} 0.000001 μ(マイクロ)
-5 10^{-5} 0.00001 -
-4 10^{-4} 0.0001 -
-3 10^{-3} 0.001 m(ミリ)
-2 10^{-2} 0.01 c(センチ)
-1 10^{-1} 0.1 d(デシ)
0 10^{0} 1 -
1 10^{1} 10 -
2 10^{2} 100 h(ヘクト)
3 10^{3} 1,000 k(キロ)
4 10^{4} 10,000 -
5 10^{5} 100,000 十万 -
6 10^{6} 1,000,000 百万 M(メガ)
7 10^{7} 10,000,000 千万 -
8 10^{8} 100,000,000 -
9 10^{9} 1,000,000,000 十億 G(ギガ)
10 10^{10} 10,000,000,000 百億 -
11 10^{11} 100,000,000,000 千億 -
12 10^{12} 1,000,000,000,000 T(テラ)
13 10^{13} 10,000,000,000,000 十兆 -
14 10^{14} 100,000,000,000,000 百兆 -
15 10^{15} 1,000,000,000,000,000 千兆 P(ペタ)

この表を作るのに5.4 \times 10^{3} 秒くらいかかった。

あ、ちなみに、底を2にして指数を負の数にする機会はあんまりないです。2^{16}を即答できるIT屋はけっこう居るかも知れませんが、2^{-16}を即答できるIT屋はただの変態です。

最後に、もう1つ実践して終わりましょう

ここまでの知識を使って、もう1問、ちょっとした例題を解いてみましょう。さっきは大きい数を扱ったので、今度は小さい数の問題を試してみよう。これも「応用情報技術者試験」の過去問です[8]

改変なしのマジ問題です。ちなみに僕は間違えました。

問題: 表に示す仕様の磁気ディスク装置において、1,000バイトのデータの読取りに要する平均時間は何ミリ秒か。ここで、コントローラの処理時間は平均シーク時間に含まれるものとする。
表:
| 回転数 | 6,000 回転/分 |
| 平均シーク時間 | 10ミリ秒 |
| 転送速度 | 10 Mバイト/秒 |

これ、厄介なことに、2つ、前提として知っておかないと解けない要素があります:

  1. 平均シーク時間っていうのはハードディスクの中の針が動く時間。なので、問題文より、この10ミリ秒は答えにそのまま含まれます。
  2. ディスクが針のちょうどいい位置に回転するまでの時間として、1回転する際の半分の時間で考えねばならない[9]
  • 前提1から、10 \times 10^{-3} 秒が答えに加わることが分かります。
  • 前提2から、上の表の条件でディスクが半分回転するのにかかる時間が必要。今回は60秒で6,000回転とあるので、1秒につき100回転とすぐ分かります。逆に考えると、1回転するのにかかる時間は1 \times 10^{-2} 秒ということになります。それで、これの半分の時間でいいらしいんで、\frac{1}{2} = 0.5 = 5 \times 10^{-1} で、5 \times 10^{-1} \times 1 \times 10^{-2} = 5 \times 10^{-3} 秒が答えに加わることもわかります。
  • そして、データそのものの転送速度は 10Mバイト/秒 とあります。Mが10^{6}であることを思い出せば1秒につき10^{7}バイトのスピードで読んでくれるわけです。となると、1,000バイト=10^{3}バイトを読むのにかかる時間は\frac{10^{3}}{10^{7}}秒。\frac{1}{10^{7}}10^{-7}と考えてOKって話だったので、10^{3} \times 10^{-7} = 10^{-4}秒が答えに加わることもわかります。

これらをぜんぶ足して、10 \times 10^{-3} + 5 \times 10^{-3} + 10^{-4} = 15.1 ミリ秒と判断できます。けっこう難問だな!!!![10]

おわりに

「おー、指数表記って便利なんやね。次から計算するときは使ってみよ」と思ってもらえたら、この記事は成功です。最後の例題が難しかったので若干失敗したような気がしてなりません。

脚注
  1. なお、数学的な部分の種本は これ です。大学の恩師の本です。地味に編集を手伝ったりしました。とてもいい本なのでダイマしておきます。 ↩︎

  2. 正直に言いますが、僕に「10^{12}は?」っていきなり聞いたとしても「はい!1兆ですね!」と即座に答えることは無理です。0の数を数えながら1,000,000,000,000って書いて、いち、じゅう、ひゃく、せん、まん、じゅうまん……、と数えていって、「あ、1兆すね」と3分後くらいに答えられます。そんなもんです。 ↩︎

  3. 「二進数」という言葉は聞いたことがあると思います。0と1の2種類だけの数字を使って、あらゆる数を表現する考え方です。一方、「十進数」という言葉も聞いたことがあると思います。0,1,2,3,4,5,6,7,8,9の10種類だけの数字を使って、あらゆる数を表現する考え方です。要するに日常生活で使う数の数え方です。コンピュータ的には二進数の方が取り扱いが楽で、人間的には十進数の方が取り扱いが楽。なので、ある数を表現するときに(ああ、そうだ、進数の話をするときは底は基数って名前になります)基数を2とする場合と基数を10とする場合とで、相互に変換することが多々あるのです。変換のやり方はこの記事では扱いません。10を基数とする数を2を基数とする数に変換する方法はQiitaに書いてるので、もし興味があれば読んでみてください: https://qiita.com/yamasaki1ma/items/d990858f1918ad6bc823 ↩︎

  4. この略字をSI接頭辞と呼びます。まあこの名称は覚えんでもいい。 ↩︎

  5. 応用情報技術者試験 令和3年秋季 午後 問7の設問2。原文は公開されてる のでもし確認してみたかったらここからどうぞ。あと、これは私怨ですが、ステレオカメラでカメラ2台あるってのを見落として間違えたので、腹いせとしてここでの答えは3.5GBにしました。 ↩︎

  6. ちょっと恣意的な書き方をしました。電卓って位取りの「,」を付けてくれるから、ケタ数えるのはそんな面倒くさくはないですね。 ↩︎

  7. 0より下の日本語の呼び方は普通にググりました。渺とか二度と使いそうにないな。 ↩︎

  8. 応用情報技術者試験 令和3年秋季 午前 問11 。原文は公開されてる のでもし確認してみたかったらここからどうぞ。 ↩︎

  9. 知るかよ。 あーでも、平均時間を訊ねるられてるから、絶妙にちょうどいい位置と絶妙にちょうど悪い位置の平均として半分の時間で考えないといけないか……。 ↩︎

  10. なんか応用情報は小さい数をあんまり出してこないな……、と改めて気付いた。kとかMとかGとか平気で使うならミリもmで表せばいいのに。過去問をぱらぱらしても、先の例題でやった3.5GBになるようなシンプルな問題が見つからなかったので、仕方なくこの問題を使いました……。言い訳でした。 ↩︎

Discussion