コンピュータで計算をすると、正しいはずの計算なのに誤差が出ることがあるの。
例えばこんな現象を見たことはないかしら?
0.1 + 0.2 = 0.30000000000000004
えっ?
0.3じゃないの?
と思うわよね。

実はこれ、コンピュータのバグではないの。
コンピュータが数を2進数で扱っていることが原因なのよ。
このように本来の値とズレが生じることを、
演算誤差(えんざんごさ)
というわ。
今回は
をわかりやすく説明するわね。
私たちが普段使っている数は10進数よね。
例えば
0.875
これは
$$0.875 = 0.5 + 0.25 + 0.125$$
つまり
$$0.875 = \frac{1}{2} + \frac{1}{4} + \frac{1}{8}$$
これを2の累乗で書くと
$$0.875 = 2^{-1} + 2^{-2} + 2^{-3}$$
だから
$$0.875 = 0.111_{(2)}$$
つまり2進数で正確に表せる数ね。
ところが、すべての小数が2進数で表せるわけではないの。
例えば
0.3
これを2進数にすると
$$0.3_{(10)} = 0.0100110011…$$
のように永遠に続く小数になってしまうわ。
これは10進数でいう
1 ÷ 3 = 0.333333...
と同じ現象よ。
つまり2進数では割り切れない数なの。
でもコンピュータの中では桁数は無限にはできない。
だからある桁で打ち切る必要があるのよ。
例えば小数点以下8桁までとすると
$$0.01001100_{(2)}$$
のようにするの。
これを
丸め処理
というわ。
この値を10進数に戻すと
$$0.01001100_{(2)}$$
$$= 0\times2^{-1} + 1\times2^{-2} + 0\times2^{-3} + 0\times2^{-4}$$
$$+1\times2^{-5} + 1\times2^{-6} + 0\times2^{-7} + 0\times2^{-8}$$
計算すると
$$0.296875$$
になる。
元の値は
0.3
だったわよね。
でもコンピュータの中では
0.296875
として扱われているの。
つまり誤差が生まれているということね。
さらに問題なのは、計算を繰り返すと誤差が少しずつ広がることなの。
これを誤差の伝播というわ。
だからコンピュータの計算では
といった問題が起こるのよ。
でもこの仕組みを知っておくと、
などの理解がぐっと深まるの。ぜひ覚えておいてね。
それじゃあ!
今日は「クロック」に関する計算問題を、すっきり整理していきましょう。
クロックの問題は難しそうに見えるけれど、実は全部で6パターンしかないの。

この6パターンを理解してしまえば、 高校情報Ⅰのクロック計算問題はほとんど解けるようになるわ。
一つずつ落ち着いて見ていきましょうね。
クロック周期が与えられているとき、クロック周波数は次の式で求められるわ。
$$
f = \frac{1}{T}
$$
つまり、周期の逆数が周波数になるの。
解き方
$$
f = \frac{1}{0.002}
$$
$$
f = 500
$$
答え:500 Hz
今度は逆に、クロック周波数から周期を求める計算問題ね。
$$
T = \frac{1}{f}
$$
まず GHz を Hz に直すわ。
$$
2GHz = 2 \times 10^9 Hz
$$
周期は
$$
T = \frac{1}{2 \times 10^9}
$$
答え:0.5ナノ秒
処理にかかる時間は、次の公式で求められるわ。
$$
実行時間 = \frac{クロック数}{クロック周波数}
$$
$$
実行時間 = \frac{6000}{3 \times 10^9}
$$
$$
= 2 \times 10^{-6}
$$
答え:0.000002秒
実行時間とクロック周波数が分かれば、必要なクロック数も求められるわね。
$$
クロック数 = 実行時間 \times クロック周波数
$$
$$
クロック数 = 2 \times 10^9
$$
答え:20億クロック
CPUの性能を考えるときによく出る問題ね。
$$
命令数/秒 = \frac{クロック周波数}{1命令に必要なクロック数}
$$
$$
命令数 = \frac{2 \times 10^9}{0.5}
$$
$$
= 4 \times 10^9
$$
答え:40億命令/秒
最後は少しだけ発展した問題です。
$$
命令数 =
\frac{クロック周波数 \times 時間}{1命令のクロック数}
$$
$$
命令数 =
\frac{3 \times 10^9 \times 10}{3}
$$
$$
= 10 \times 10^9
$$
答え:100億命令
クロック周期とクロック周波数の関係。
それからCPUの処理時間の式。
この2つを理解しておけば、クロック問題はほとんど怖くないわよ。
それじゃあね!
今日はクロック数、クロック信号、それからクロック周波数について勉強してみましょうか。
これらの言葉、似ているけれど実はそれぞれ違う意味を持っているの。
だから、CPUやメモリなどの装置がうまく連携して動くためには、
動作のタイミングをそろえる必要あるわね。
そこで使われるのが
クロック信号
なのよ。
クロック信号とは、
コンピュータの動作のタイミングを決める合図の信号
のこと。
イメージとしては、
のようなものね。
CPUは
「カチ」
「カチ」
「カチ」
という一定のリズムに合わせて処理を進めていくの。
クロック数とは、
ある処理を行うために必要なクロック信号の回数
のこと。
たとえば
というように、処理によって必要なクロック数は変わるわ。
つまり、
その処理が何回合わせたタイミングのリズムが必要なのか
を表しているのね。
クロック周波数とは、
1秒間にクロック信号が何回発生するか
を表したものね。
単位はHz(ヘルツ)。
例えば
1GHzのCPU
の場合、1秒間に10億回クロック信号が出ていることになるわ。
つまり、
クロック周波数が高いほど、コンピュータの処理は速くなるってこと。
それだけ、1秒間あたりの処理する回数が多いってことだからね。
えっ、まだ違いがピンと来てない??

クロック信号をメトロノームの
「カチ」
という1回の音だと考えてみましょう。
すると、それぞれの意味はこうなるの。
つまり、
・クロック信号はリズムの1拍
・クロック数は曲を演奏するのに必要な拍数
・クロック周波数はリズムの速さ
という関係になるのよ。
オッケー、最後にクロック数・クロック信号・クロック周波数の違いを表にまとめておきましょう。
| 用語 | ポイント | 覚え方 |
|---|---|---|
| クロック信号 | CPUの動作タイミングを作るリズム | メトロノームの1回の「カチ」 |
| クロック数 | 処理に必要なクロック信号の回数 | 曲に必要な「カチ」の数 |
| クロック周波数 | 1秒間に発生するクロック信号の回数 | 1秒間の「カチ」の回数 |
リズム(クロック信号)があって、そのリズムが1秒間に何回鳴るかがクロック周波数。そして、そのリズムを何回使って処理するかがクロック数。
それじゃあ!
音楽や声などのアナログ信号をコンピュータで扱うためには、その信号をデジタル化する必要があるわ。
そのときに行われる大切な操作が、標本化ね。
今回の
はどちらも「標本化」に関するキーワードなの。
えっ、標本化忘れちまった???
そんなときはよかったら「標本化・量子化・符号化の違い」を復習してみて。
まずは標本化周期からね。
これは、
標本化する時間の間隔
のことを指すわ。
つまり、
どれくらいの時間ごとにデータを取り出すか
を表しているのね。
単位は[s](秒)。
たとえば
といったように、標本化する間隔を示しているわ。
もちろん、この標本化周期が短いほどより細かく音を記録できて、元のアナログ波形に近い音を再現できるのよ。
一方で、標本化周波数は
1秒間に何回標本化するか
を表したものよ。
単位はHz(ヘルツ)。
たとえば
という意味になるわ。
ちなみに、CDの音楽は
44,100Hz(44.1kHz)
で標本化されているのよ。
かなり細かく音を記録していることがわかるでしょう?
ズバリ言っちゃうわ。
標本化周期と標本化周波数は、
逆数の関係にあるわ!
これが違いね。
つまり
$$
標本化周波数 = \frac{1}{標本化周期}
$$
という関係になるの。
たとえば、標本化周期が
$$
0.001 \text{秒}
$$
だったら、標本化周波数は
$$
\frac{1}{0.001} = 1000
$$
になるわ。

A君が赤い旗を
「よいしょ、よいしょ」
と一定のリズムで上げているとしましょう。
このとき、
旗を上げる間隔が標本化周期。
たとえば、
この旗を上げる時間の間隔が周期になるの。
一方で、標本化周波数は1秒間に旗を何回上げているかを表すわ。
たとえば
という感じね。
つまり
こう考えると、違いがスッと理解できるでしょう?
最後にポイントを整理しておきましょう。
そしてこの2つは
逆数の関係
になってるわね。
それじゃあ、またね。
アナログの音や映像をコンピュータで扱うためには、データをデジタル化する必要があるの。
そのときに行う大事なステップが3つあるわ。
それが標本化、量子化、符号化よ。
この3つの流れを順番に見ていきましょう。
標本化とは、
アナログ信号を一定の時間ごとに取り出すことよ。
音や映像などのアナログ信号は、本来は時間とともに連続的に変化しているわ。
そこで、その信号を一定の時間間隔で区切って、値を取り出していくの。
この操作を標本化(サンプリング)というのよ。
例えば映画では、一般的に1秒間に24枚の画像が使われているわ。
つまり、1秒間の動きを24回に分けて撮影しているということ。
これは「1秒間に24回、標本化している」と考えることができるの。
イルカが海を泳ぐ様子を撮るとして、1秒ごとに何回も写真を撮って記録するイメージね。

この回数を標本化周波数(サンプリング周波数)と呼ぶわ。
次に量子化よ。
標本化では「いつの値を取るか」を決めたけれど、量子化では
信号の大きさ(電圧)を段階的な値に丸める
の。
アナログ信号は本来、非常に細かい値をとるわ。
でもコンピュータでは無限の値を扱えないので、
決められた段階の値に近いものへ丸めるのよ。
これが量子化よ。
例えば、物差しで長さを測る場面を想像してみて。
本当は「12.345cm」かもしれないけれど、物差しの目盛りが1mm単位なら
12.3cm や 12.4cm
のように、近い値に合わせて測るわよね。

このように、細かい値を段階に合わせて丸めることが量子化なの。
量子化するときに使う段階の数は、量子化ビット数によって決まるわ。
例えば
・8bit → 256段階
・16bit → 65536段階
のようになるのよ。
最後が符号化よ。これは、
量子化によって得られた数値を、2進数(0と1)で表現すること
ね。
コンピュータは0と1しか理解できないから、データをこの形に変換する必要があるの。
音声データなどでは、この方法を
PCM(パルス符号変調)方式
と呼ぶこともあるわ。
このプロセスを、言葉の翻訳に例えてみましょう。
例えば、日本語で書かれた本を英語に翻訳するように、
量子化された数値を「0」と「1」の言葉に変える
それが符号化なのよ。

オッケー、標本化・量子化・符号化の違い、しっくりきたからしら??
最後に、3つの違いを覚えるコツを教えるわね。
昆虫の様子を一定の間隔で写真に撮る標本家(ひょうほんか)

猟師(りょう)が鹿(しか)の大きさを「小」「中」「大」の3段階で判断する

富豪家(ふごうか)が重要なメッセージを0と1に変換して送る

このイメージを覚えておけば、
標本化 → 量子化 → 符号化
の違いが自然に理解できるわ。
それじゃあ、またね!
今日は半加算回路についてお話しするわ。
ちょっとだけ本格的なテーマよ。でも大丈夫。ちゃんと順番にいくから安心してね。
半加算回路とは、
2進数の1ビットどうしを足し算する回路
のことよ。
コンピューターは「0」と「1」しか扱えない。
でもその0と1を足し算することで、大きな計算ができるようになるの。
その一番シンプルな足し算回路が、半加算回路なのよ。
まずは1ビットの足し算を見てみましょう
2進数の足し算はこうなるわ。
| A | B | 結果 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 10 |
最後を見て。
1 + 1 = 10
答えが2桁になるのよ。
つまり、2進数の足し算の結果は
の2つに分かれるということ。
ってことで、2つのA・Bという入力に対して、半加算回路の出力は次の2つがあるわ。
では、実際の半加算回路を見てみましょう。

この回路、よく見て。
上のAND回路から出ているのがC(繰り上がり)よ。
これはもうわかるわね?

両方が1のときだけ1になる。
じゃあ下の出力S(下の桁)はどうなっているのかしら?

真理値表で確認してみましょう。
| A | B | S | C |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
どう?
これ、さっきの足し算と同じでしょう?
ほら、ちゃんと足し算になっているの。
そしてここが今日の一番大事なところ。
この回路、使っているのは、
だけ。
つまり、
今まで学んできた3つの基本回路だけで、足し算ができる
ということよ。
コンピューターは特別な「計算回路」を持っているわけじゃない。
AND・OR・NOTを組み合わせて、
計算そのものを作っているの。
フフッ、すごいでしょう?
論理回路が、ついに「算数」になった瞬間よ。
フフッ、今日はNOT回路についてお話しするわ。
でも安心して。あたしがわかりやすく説明するわね。
NOT回路は、デジタル論理回路の中でもとてもシンプルな回路よ。
入力が「1」なら出力は「0」
入力が「0」なら出力は「1」
つまり、
入力をひっくり返す回路なの。
オンならオフに。オフならオンに。
まるで「あまのじゃく」みたいでしょう?
NOT回路の記号はこんな形よ。

三角形の先に小さな丸がついているでしょう?
この丸(バブル)が「反転」を意味しているの。
この記号はインバータ(反転器)とも呼ばれるわ。
真理値表で見ると、さらにわかりやすいわよ。
| 入力 A | 出力 L |
|---|---|
| 0 | 1 |
| 1 | 0 |
見ての通り、入力と出力が逆になっているだけなの。
シンプルでしょう?
例えば、ライトを消すスイッチがあると考えてみて。
スイッチがオン(1)になると、ライトは消える(0)。
スイッチがオフ(0)なら、ライトは点く(1)。
普通とは逆の動きをするスイッチ。

それがNOT回路なのよ。
NOT回路は、
数式で書くなら、
L=¬A
ね。
ひとつの入力を反転する、もっとも基本的な回路。
それじゃあね。また一緒に勉強しましょう~!
フフッ、今日はOR回路についてお話しするわ。
最初に、OR回路ってなんのこっちゃって感じだと思うけれど、あたしがバッチリ解説するから安心してね。
OR回路は、コンピューターのデジタル論理回路の一種。
2つ以上の入力があって、それらのどれか1つでも「1(オン、電流が流れている状態)」があれば、出力が「1」になる
という特徴を持っているわ。
つまり、
どれか1つでもオンになればオッケーよ!
っていう回路ね。
OR回路を構成する記号はこんな感じで、ちょっとお洒落でしょう?

これはORゲートと呼ばれるものなの。
そして、真理値表。
これは入力に対する出力がどうなるかを表している表よ。
数学のように苦手かもしれないけど、これを見れば一目瞭然だから心配しないで。
| 入力 A | 入力 B | 出力 L |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
見ての通り、どちらかの入力が「1」なら、出力も「1」になるわよ。
じゃあ、どうやって直感的に理解するかしら?
フフッ、みんなと一緒に考えてみましょう。
例えば、ライトを付けるためのスイッチが2つあると考えてみて。この2つのスイッチのどちらを押してもライトが点く仕組みがOR回路なの。

つまり、Aを押したら点くし、Bを押しても点くわ。そしてどっちも押したら、もちろん点き続けるの!
こんな感じで簡単に理解できるから、ちゃんと押さえておくのよ。
それじゃあね!また会いましょう~!
AND回路について詳しく知りたいと思っている?
では、一緒に学んでいきましょう。
AND回路はデジタル回路で欠かせないロジックゲートのひとつよ。
これを使えば入力が二つとも「1」の場合だけ出力が「1」になるという仕組みなの。
AND回路は二つの入力が必要よ。
その入力をAとBとして、出力をLとした場合の式は
L=A∧B
これは二つの入力が「1」なら出力も「1」という意味ね。
AND回路は次のような図記号で表されるわ。

左側の2本の線が入力AとB。
右側の1本の線が出力Lよ。
このDのような形が「AND」を表す記号なの。
回路図では、この記号を論理ゲートと呼ぶわ。
真理値表はAND回路の動作を表す基本的な方法よ。
| A | B | L (A AND B) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
AND回路は、
つまり、
回路記号は「形」で表したもの。
真理値表は「表」で動きを表したもの。
数式は「式」で論理を表したもの。
同じAND回路を、図・式・表の3つの視点で説明しているのよ。
見方が違うだけで、中身は同じ。
そんじゃあね!
今日は「真理値表」って何?というところから始めるわね。
ここを理解すると、コンピューターの計算の仕組みが一気に見えてくるのよ。
一言でいうと、
入力と出力の関係をすべて書き出した表
よ。

コンピューターは「0」と「1」だけで動いているわよね。
だから、
入力が0や1のとき、出力がどうなるかを全部並べて確認するの。
それが真理値表。
入力が1つなら、組み合わせは2通りね。
| 入力 | 出力 |
|---|---|
| 0 | ? |
| 1 | ? |
じゃあ、入力がAとBの2つある場合は??
組み合わせは、
全部で4通り。
| A | B | 出力 |
|---|---|---|
| 0 | 0 | ? |
| 0 | 1 | ? |
| 1 | 0 | ? |
| 1 | 1 | ? |
これを全部書き出す。
それが真理値表。
コンピューターは、
必ずルール通りに動く
からよ。
だから、
どんな入力でも結果が決まっていないといけない。
その「ルールの一覧」が真理値表なの。
入力がn個なら、組み合わせは
2ⁿ通り
になるわ。
例:
入力が2つ(AとB)の場合:
| A | B |
|---|---|
| 0 | 0 |
| 0 | 1 |
| 1 | 0 |
| 1 | 1 |
ポイントは、
2進数の順番で並べること。
00 → 01 → 10 → 11
と数えていくのよ。
例えばAND回路なら。
「両方1のときだけ出力が1になる」
だから、
| A | B | 出力 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
これで完成よ。
特に「8通りなのに6通りしか書いてない」ミスは多いわよ。
そんじゃあね!
今日は高校「情報」でよく出てくる
文字コードとは何か?
を、わかりやすく解説していくわね。
まず一言でいうと、
文字を数字に変換するルール
これが文字コードよ。
コンピューターの中では、
もすべて0と1で表されているの。

つまり、
「あ」も「A」も「☆」も全部「数字」なのよ。
コンピューターは、
数字(2進数)しか理解できない
からよ。

だから、コンピューターに文字を伝えるときは「A」って伝えるんじゃなくて、
01000001
みたいなAに対応した文字コードを伝えるのね。
文字を対応する数字に変換しているの。
これが文字コード。
高校情報でまず出てくる文字コードは、
ASCII(アスキー)
ね。
これは、
を7ビットで表すルールよ。
例えば、「A」だったらこんな感じ。
A = 65(10進数) = 01000001(2進数)
ASCIIをもとに、
日本語の片仮名などを追加したもの
がJIS8ビットコード。
8ビットだから、
2⁸ = 256種類
の文字を表せるわ。
でもね。
漢字は何万字もあるの。
1バイト(8ビット)では足りないのよ。
そこで、日本語を扱うために、
などが作られたの。
例えば、平仮名の「あ」は
つまり、同じ「あ」でも、文字コードが違えば数字も違うの。
注目すべきはユニコードね。
これは、
世界中の文字を統一的に扱うために作られた文字コード
よ。
ユニコードの種類には、UTF-8やUTF-16などがあるわ。
今のインターネットは、ほぼUTF-8よ。
ここ、テストに出るわよ。
もし、ユニコードで保存した文章をJISコードとして読み込んだらどうなる??
そう、数字の解釈がズレて、
文字化けが起こる
のよ。おそらく、このようなよくわからない文字が誕生するわ。
�
縺ゅ>
繝�繧ケ
そんな文字たちを見かけたら、
文字化け = 文字コードの読み間違い
を疑いましょうね。
そんじゃあね!
浮動小数点数って聞くと、少し難しそうに感じるかもしれないけど、心配しないで。
わかりやすく解説するから、一緒に勉強していきましょう!
まずはイメージからいきましょう。
浮動小数点数とは、
大きい数も小さい数も効率よく表せる2進数の指数表現
のことよ。
実はこれ、みんながすでに知っている「科学記数法」と同じ考え方なの。
たとえば、
1530 = 1.53 × 10³
こんなふうに書けるわよね?
このとき、
という構造になっている。

つまり、
数 = 仮数 × 10の指数乗
なのよ。

コンピューターは10進数ではなく、2進数の世界で動いている。
だから、
数 = 仮数 × 2の指数乗
という形にするの。

例えば、15.125 を2進数にしてみましょうか。

まず10進数を2進数に変換するわ。
整数部分:
15 = 1111₂
小数部分:
0.125 = 0.001₂

だから、
15.125 = 1111.001₂

そして、浮動小数点では、必ず
1.xxxxx × 2ⁿ
の形に直すの。これを正規化(せいきか)というわ。
つまり、仮数(小数部分)の先頭が必ず 1 になる形にそろえるのね。
1111.001₂ を正規化すると、どうなるかしら??
左に3つ小数点を移動させて、2の3乗をかけた形にすればいいわね。

1.111001 × 2³
これが浮動小数点の基本形よ。

実際のコンピューターでは、32ビットをこう分けて保存するの。

0なら正、1なら負。
指数はそのまま入れない。
指数 + 127
を入れるのよ。
これを「バイアス」と言うわ。
今回の指数は3だから、
3 + 127 = 130
130を2進数にすると、
10000010₂
これが指数部になる。
正規化した形は、
1.111001
だったわね。
でもここで大事なポイントよ。
浮動小数点では、正規化すると必ず先頭は1になるの。
だから、その「1」はわざわざ保存しないのよ。これを隠れた1(hidden bit)っていうの。
つまり、保存するのは小数点の後ろだけ。
111001
ここまでが、実際に必要な情報ね。
でもね、仮数部は23ビットって決まっているの。
だから、ビットが足りない分はどうすると思う?
そう、右側を0で埋めるのよ(ゼロ埋め)。
11100100000000000000000
こうして23ビットにそろえるの。
後ろに数字がないのは、「それ以上の情報がない」という意味。
だから安心して0を並べていいのよ。
0 | 10000010 | 11100100000000000000000
これが 15.125 の32ビット浮動小数点表現よ。
そんじゃあね!