指数を自在に操って大きい数字や小さい数字を自信もって処理できるようになろうぜ(応用情報例題つき)
はじめに
今秋(2021年)、応用情報技術者試験を受験しました。午前の解答を自己採点したり午後問題のスレを眺めつつ検算したりして、まあたぶん受かったな、いえーい^^ という気持ちです。
それで、それらのスレを見てたら、僕が思ってるより、計算問題、特に指数の扱いを苦手としている人が多いなという印象を受けました。
というわけで、そういう人たち向けに「指数の操作方法わかったら楽だぜ」という話を書いてみます[1]。
想定対象読者
- 大きい数字や小さい数字の計算がどうにも苦手な人。
- ITパスポートや基本情報や応用情報を取ろうとしているけど、計算問題がいまいち解けない人。
- 数学が嫌い。指数とかなんなの? もっと簡単に説明しろ、と思っている人。
指数表記について
一歩一歩いきましょう。
ここに、
ここに、
ここに、
ここに、
いいかげんうっとうしいので、10をx個(あるいはx回)かけ算した数を
そうすると、「100億 = 1,000,000,000」とかデカい数字になっても、この表記方法なら
別の視点で見ると、
さてそれで、ちょっとごめんなさい。どうしてもこのあと使いたいから言葉の定義をさせてください:
- かける数(ここまでだと「
」)のことを底(てい) と呼びます。10 - 底の右上につけるかける個数あるいは回数(ここまでだと「
」とか「1 」とか「2 」とか)のことを指数と呼びます3 - つまり、たとえば
の場合は、底が10^{12} で、指数が10 ってことですね。12
- つまり、たとえば
それで、ある数
指数表記を恐れる必要は全くありません。だって、結局は、「底を指数の数だけ掛け算した数」 に過ぎないからです。
ただ、「1兆」という言葉は日本人にしか通じないし、「1,000,000,000,000」って書くのは長くてだるいし、だったら世界共通ルールで
それではちょっとした問題です。
それで指数法則について
さて、次の式を指数法則って呼びます:
は? ってなったと思いますが、もうちょっとだけ読んでから離脱するか否かを決めて。
まず、
左辺は、
うすぼんやり気付いたかもしれませんが、ぶっちゃけ言うと、この指数法則って、めっちゃ当たり前なこと言ってるだけです。同じ数(底)を
たとえば、
-
だとして、そりゃ、100に100をかけたら10,000なわけで、10,000を指数表記したら10^{2} \times 10^{2} だ。10^{4} -
だとして、そりゃ、4に16をかけたら64なわけで、64を指数表記したら2^{2} \times 2^{4} だ。2^{6}
上の例に限らず、他の数で試してみても同じになります。おヒマならほかの例も試してみてください。指数法則、めっちゃ当たり前じゃん!!!! と思えたタイミングで次の説へお進みください。
底を2にするときと、10にするときと
底は、ITの分野だと、2か10が入ることが多いです。本筋からは外れるので、「なんで?」と思った場合は脚注を読んでください[3]。
底を2にするときの指数について(ここは読み飛ばし可)
底を2にして、指数を1~16くらいまでにして計算してみましょう。こんな感じ。
指数 | 指数表記 | 数 |
---|---|---|
1 | 2 | |
2 | 4 | |
3 | 8 | |
4 | 16 | |
5 | 32 | |
6 | 64 | |
7 | 128 | |
8 | 256 | |
9 | 512 | |
10 | 1,024 | |
11 | 2,048 | |
12 | 4,096 | |
13 | 8,192 | |
14 | 16,384 | |
15 | 32,768 | |
16 | 65,536 |
この表の内容を覚える必要はないです。もしも必要になればそのつど電卓を使って計算すればいいんです。でもね、なぜかIT系の強いやつらはこの表の右半分を隠してもぜんぶ即答できるんですよね。怖い。業務上、何かと使う機会が多いからだとは分かるけど……。
底を10にするときの指数法則について(こっちは読んでほしい)
底を10にして、同じような表を作ってみましょう。
この表については、覚えてほしい箇所がある。IT業界に進むにせよ、そうでないにせよ、きっとどこかで役に立つ。特に、表の中で「表し方」とラベルをつけている箇所が重要。これは国際的なルールとして、 たとえば、
指数 | 指数表記 | 数 | 日本語 | 表し方 |
---|---|---|---|---|
1 | 10 | 十 | - | |
2 | 100 | 百 | - | |
3 | 1,000 | 千 | k(キロ) | |
4 | 10,000 | 万 | - | |
5 | 100,000 | 十万 | - | |
6 | 1,000,000 | 百万 | M(メガ) | |
7 | 10,000,000 | 千万 | - | |
8 | 100,000,000 | 億 | - | |
9 | 1,000,000,000 | 十億 | G(ギガ) | |
10 | 10,000,000,000 | 百億 | - | |
11 | 100,000,000,000 | 千億 | - | |
12 | 1,000,000,000,000 | 兆 | T(テラ) | |
13 | 10,000,000,000,000 | 十兆 | - | |
14 | 100,000,000,000,000 | 百兆 | - | |
15 | 1,000,000,000,000,000 | 千兆 | P(ペタ) |
ちょっと実践してみようか
ここまでの知識を使って、ちょっとした例題を解いてみましょう。
これは、「応用情報技術者試験」という割と難しい方のIT関係の国家資格の問題をちょっと改題したものです[5]。ここまでの知識があれば割と楽に解けます。
問題: 800×600のサイズで1画素あたり3バイトの画像を、1秒間に20枚、2分間撮影して動画にしたい。この場合、動画のサイズは何Gバイトになるか。
つまるところ、縦横サイズが800x600で、よくわからんけど1ピクセルずつ3バイトってことは画像1枚が
電卓が使えれば一瞬なんですけどね。この試験、電卓禁止なんですよ。それにもし電卓が使えたとしても出てくる答えは
さて、ここで、たとえば800って、
と書けるわけです。底が10のところを集めて指数法則を使えば、
残念だけど、指数表記じゃないところの数字は計算するしかない。345.6になった。345.6は、
もうちょっと指数法則について考えてみよう
上の例題を解いて、指数法則便利じゃん! とか 指数法則完全にわかった! と思ってもらえていたら、とても嬉しい。
しかし、指数法則がこれから猛威を振るう。猛威を振るうのだが、僕たちは、指数法則は絶対に間違っていない という立場を取ることをここで約束しよう。わけわかんねーよってなっても、指数法則さんが言うなら正しいんだ、という態度で行こう。よし、いくぞ。
底がなんであれ、指数が0のとき、その数は1である。
いきなり殴りつけてごめん。
でもね、指数法則を信ずるのであれば、これは簡単に説明ができる。
指数法則はこうだった:
ここまで、
これって、両辺を
こうなるってことだ。つまり、
0乗が1になるとか意味わかんねえ!! と言いたい気持ちはよくわかるのですが、僕たちは、指数法則は絶対に間違っていない という立場を取るのであった。指数法則さんが「底
底がなんであれ、指数が負の数のとき、その数は底の逆数を累乗した数である。
また殴りつけてごめん。
でもね、指数法則を信ずるのであれば、これも説明ができる。0乗よりはちょっと難しい。
もう1回指数法則を書く:
ここで、
ということになる。さっき見たとおり、0乗は1だから、上の式は、
ということになって、これって、両辺を
ということになる。
負の数を指数にするのがそもそも意味わかんねえし、それがこうなるのも意味わかんねえ!! と言いたい気持ちはよくわかるのですが、僕たちは、指数法則は絶対に間違っていないという立場を取るのであった。指数法則さんが「底
そう、だからたとえば、
底を10にするときの指数法則について(拡張版)
さて、底に対して指数を0にしたときと負の数にしたときにどうなるかを見ました。この記事の真ん中あたりで見た、10を底にするときの表を拡張してみよう。やっぱりここでも、指数の数と「表し方」との対応は覚えておいてほしい。日本語はおまけ。
指数 | 指数表記 | 数 | 日本語[7] | 表し方 |
---|---|---|---|---|
-15 | 0.00000000000001 | 須臾 | f(フェムト) | |
-14 | 0.00000000000001 | 逡巡 | - | |
-13 | 0.0000000000001 | 模糊 | - | |
-12 | 0.000000000001 | 漠 | p(ピコ) | |
-11 | 0.00000000001 | 渺 | - | |
-10 | 0.0000000001 | 挨 | - | |
-9 | 0.000000001 | 塵 | n(ナノ) | |
-8 | 0.00000001 | 沙 | - | |
-7 | 0.0000001 | 繊 | - | |
-6 | 0.000001 | 微 | μ(マイクロ) | |
-5 | 0.00001 | 忽 | - | |
-4 | 0.0001 | 糸 | - | |
-3 | 0.001 | 毛 | m(ミリ) | |
-2 | 0.01 | 厘 | c(センチ) | |
-1 | 0.1 | 分 | d(デシ) | |
0 | 1 | 一 | - | |
1 | 10 | 十 | - | |
2 | 100 | 百 | h(ヘクト) | |
3 | 1,000 | 千 | k(キロ) | |
4 | 10,000 | 万 | - | |
5 | 100,000 | 十万 | - | |
6 | 1,000,000 | 百万 | M(メガ) | |
7 | 10,000,000 | 千万 | - | |
8 | 100,000,000 | 億 | - | |
9 | 1,000,000,000 | 十億 | G(ギガ) | |
10 | 10,000,000,000 | 百億 | - | |
11 | 100,000,000,000 | 千億 | - | |
12 | 1,000,000,000,000 | 兆 | T(テラ) | |
13 | 10,000,000,000,000 | 十兆 | - | |
14 | 100,000,000,000,000 | 百兆 | - | |
15 | 1,000,000,000,000,000 | 千兆 | P(ペタ) |
この表を作るのに
あ、ちなみに、底を2にして指数を負の数にする機会はあんまりないです。
最後に、もう1つ実践して終わりましょう
ここまでの知識を使って、もう1問、ちょっとした例題を解いてみましょう。さっきは大きい数を扱ったので、今度は小さい数の問題を試してみよう。これも「応用情報技術者試験」の過去問です[8]。
改変なしのマジ問題です。ちなみに僕は間違えました。
問題: 表に示す仕様の磁気ディスク装置において、1,000バイトのデータの読取りに要する平均時間は何ミリ秒か。ここで、コントローラの処理時間は平均シーク時間に含まれるものとする。
表:
| 回転数 | 6,000 回転/分 |
| 平均シーク時間 | 10ミリ秒 |
| 転送速度 | 10 Mバイト/秒 |
これ、厄介なことに、2つ、前提として知っておかないと解けない要素があります:
- 平均シーク時間っていうのはハードディスクの中の針が動く時間。なので、問題文より、この10ミリ秒は答えにそのまま含まれます。
- ディスクが針のちょうどいい位置に回転するまでの時間として、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が
であることを思い出せば1秒につき10^{6} バイトのスピードで読んでくれるわけです。となると、1,000バイト=10^{7} バイトを読むのにかかる時間は10^{3} 秒。\frac{10^{3}}{10^{7}} は\frac{1}{10^{7}} と考えてOKって話だったので、10^{-7} 秒が答えに加わることもわかります。10^{3} \times 10^{-7} = 10^{-4}
これらをぜんぶ足して、
おわりに
「おー、指数表記って便利なんやね。次から計算するときは使ってみよ」と思ってもらえたら、この記事は成功です。最後の例題が難しかったので若干失敗したような気がしてなりません。
-
なお、数学的な部分の種本は これ です。大学の恩師の本です。地味に編集を手伝ったりしました。とてもいい本なのでダイマしておきます。 ↩︎
-
正直に言いますが、僕に「
は?」っていきなり聞いたとしても「はい!1兆ですね!」と即座に答えることは無理です。0の数を数えながら1,000,000,000,000って書いて、いち、じゅう、ひゃく、せん、まん、じゅうまん……、と数えていって、「あ、1兆すね」と3分後くらいに答えられます。そんなもんです。 ↩︎10^{12} -
「二進数」という言葉は聞いたことがあると思います。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 ↩︎
-
この略字をSI接頭辞と呼びます。まあこの名称は覚えんでもいい。 ↩︎
-
応用情報技術者試験 令和3年秋季 午後 問7の設問2。原文は公開されてる のでもし確認してみたかったらここからどうぞ。あと、これは私怨ですが、ステレオカメラでカメラ2台あるってのを見落として間違えたので、腹いせとしてここでの答えは3.5GBにしました。 ↩︎
-
ちょっと恣意的な書き方をしました。電卓って位取りの「,」を付けてくれるから、ケタ数えるのはそんな面倒くさくはないですね。 ↩︎
-
0より下の日本語の呼び方は普通にググりました。渺とか二度と使いそうにないな。 ↩︎
-
応用情報技術者試験 令和3年秋季 午前 問11 。原文は公開されてる のでもし確認してみたかったらここからどうぞ。 ↩︎
-
知るかよ。 あーでも、平均時間を訊ねるられてるから、絶妙にちょうどいい位置と絶妙にちょうど悪い位置の平均として半分の時間で考えないといけないか……。 ↩︎
-
なんか応用情報は小さい数をあんまり出してこないな……、と改めて気付いた。kとかMとかGとか平気で使うならミリもmで表せばいいのに。過去問をぱらぱらしても、先の例題でやった3.5GBになるようなシンプルな問題が見つからなかったので、仕方なくこの問題を使いました……。言い訳でした。 ↩︎
Discussion