コンピュータは足し算しかできず、しかも 0.1 + 0.2 を間違える。その両方を自分の手で確かめる
50分準備 教室コードは新しいものにする。「教師」を押す。体験 01〜03 は端末内で完結する。
時間配分 前回まとめ・目標 4分 / 節1 3 つの回路 16分 / 節2 足し算の回路 12分 / 節3 限界 12分 / まとめ・自己評価・ふりかえり 6分
教科書: 新編情報Ⅰ 23 演算の仕組みとコンピュータの限界(p.68)、章末資料 2 進法の足し算回路。
この回の評価(指導要領 (3) ア(ア) イ(ア)。演算の仕組み、値の範囲や精度が有限で計算結果が誤差を含みうること。単元設計は 単元設計のページ)
ふりかえりの枚の自己評価の分布を見て、「まだ」が多い目標を次回冒頭で拾い直す。
前回、CPU に ADD(足す)という命令があった。では CPU の中で、足し算はどう行われているのか。答えは、電気のスイッチの組み合わせ。今日はスイッチを自分で押す
2 × 4 も、8 − 6 も、コンピュータは足し算でやっている
教科書 p.68 の導入: 2×4 は 2 を 4 回足す。8−6 は 6 の補数 4 を足して 12、桁上がりを無視して 2。6÷2 は 0 になるまで引く(=補数を足す)。板書で 1 分。
スイッチを押して表を埋める
1 + 1 が 10 になる
0.1 + 0.2 を計算させる
両方押したら光る。どちらか押したら光る。押すと消える

左の A・B を押して 0 と 1 を切り替える。右の 3 つの回路の電球がどう光るかを見る。下の表は、灰色の欄が入力の組み合わせ(決まっている)、白い欄が答える場所。青いボタン 0 と 1 のどちらかを押して予想を入れ、4 通り全部を埋めてから「答え合わせ」
| A | B | 出力を選ぶ |
|---|
| A | B | 出力を選ぶ |
|---|
| A | 出力を選ぶ |
|---|
進め方(12分) 全員が 4 通り押して、表を予想で埋めて答え合わせ(8分)。そのあと「AND は掛け算、OR は足し算(1+1 は 1 止まり)、NOT は反転」の覚え方。
言葉 論理演算 = 0 と 1 だけを使った計算。論理回路 = 論理演算を行う回路。真理値表 = 入力と出力の全組み合わせの表。どんなに複雑な処理も、この 3 つの組み合わせで作れる。
身近な例: AND = 両方のボタンを押すと開く安全装置。OR = どちらのスイッチでも点く階段の電気。NOT = 押している間だけ消える。目標 01。
1 + 1 = 10。答えの桁と、桁上がりの桁

A + B を 2 進数で計算する回路。「答え(S)」は A と B が違うときだけ 1(XOR)。「桁上がり(C)」は両方 1 のときだけ 1(AND)。A・B を押して 4 通りを確かめ、表の 0 と 1 のボタンで C と S を埋める
| A | B | C を選ぶ | S を選ぶ |
|---|
進め方(8分) 1 + 1 で S が 0、C が 1 になるのを見せる。「2 進数の 1 + 1 は 10。下の桁が S、上の桁が C」。表を埋めて答え合わせ。
XOR は AND・OR・NOT の組み合わせで作れる。半加算器を 2 つ組み合わせると下からの桁上がりも扱える全加算器になり、それを並べれば何桁でも足せる。補数と組み合わせれば引き算も。足し算の回路さえあれば、四則演算ができる。目標 02。
10 進法で 1 桁の足し算回路を作ると 100 通りの設計が要る。2 進法なら 4 通り。ここに 2 進法のよさがある(教科書章末資料)。
| 論理演算・論理回路 | 0 と 1 だけの計算と、それを行う回路。AND(両方 1 で 1)、OR(どちらか 1 で 1)、NOT(反転)。真理値表で入出力を表す |
| 半加算器 | 1 桁の 2 進数の足し算。答え S は XOR、桁上がり C は AND。1 + 1 = 10 |
| 足し算だけで四則演算 | 掛け算は足し算の繰り返し。引き算は補数(足して桁が上がる最小の数)を足す。割り算は 0 になるまで引く。回路が単純だから速い |
「コンピュータは複雑な計算を特殊な方法で解く装置ではなく、単純な計算を高速に繰り返す装置」(教科書)。前回のクロックと結ぶ。
0.1 + 0.2 は 0.3 か

2 つの数を入れて「計算」。この端末のコンピュータが実際に出した答えがそのまま出る。まず 0.1 と 0.2。次に 4.2 − 4.3 になるよう「4.2」と「-4.3」。整数(3 と 4)でも試す
※ 0.1 を 2 進数にすると 0.000110011001100… と無限に続く。コンピュータは決まったビット数で打ち切るので、ほんの少しずれた値を持っている。それを足すとずれが見える
進め方(9分) 0.1 + 0.2 → 0.30000000000000004。「電卓は 0.3 なのに」。4.2 + (-4.3) → -0.09999999999999964(教科書 p.69 の例)。3 + 4 → 7(整数は正確)。
理由 0.1 は 2 進数で無限小数(10 進の 1/3 = 0.333… と同じ)。決まったビット数(64 ビット)で打ち切るから、わずかにずれる。整数は 2 進数で正確に表せるのでずれない。
結論 コンピュータは定められたビット数でデータを扱うため、表せる値の範囲と精度に限りがある。ビット数を増やせば精度は上がるがデータ量が増える(トレードオフ、第2単元と同じ)。お金の計算では整数(円)で扱う、などの工夫がある。目標 03。
コラム「最強モンスターが最弱に」(ビット数を超えて予期しない動作)はオーバーフローの例。
| 誤差の原因 | コンピュータは決められたビット数でデータを扱う。2 進数で無限に続く小数(0.1 など)は途中で打ち切られ、本来の値とわずかにずれる |
| 範囲の限界 | ビット数を超える大きな数は表せない(オーバーフロー)。ゲームの体力が一周して最弱になった例 |
| 対策 | ビット数を増やす(精度が上がるがデータが増える)。整数で扱う(円単位)。誤差があることを前提に、意図しない結果が出たら精度と手順を疑う |
万能に見えるが、足し算を高速に繰り返す、有限の桁の機械。限界を知っている人が、正しく使える
目標 03。次回から「手順」の話(アルゴリズム)。回路の上で動く命令の並びを、人がどう書くか。
AND と NOT だけをつないで NAND を作り、真理値表がこの回のものと合うかを確かめて、作れた回路の名前を出す
進め方 作れた人から出す。うまくいかない形も価値がある。詰まっている生徒には、手順の何番で止まっているかを聞く。
6分。回路は自分で配線できる。誤差はビット数を変えて見る。
道具は外で公開されている Web アプリ。この授業のページの中で開くので、別のページへは移らない。閉じれば、そのままこの枚に戻る。ブラウザの中で動き、入力はこの授業のサーバーには送られない。
3 つの目標それぞれに、できた/だいたい/まだ、を 1 つ選ぶ。右の帯にクラス全体の分布が出る
1 分。「まだ」が多い目標は、次回の冒頭で拾い直す。
一文でよい。「〇〇のときは、△△だから結果を確かめる」の形
3 分。次回はアルゴリズム。「手順を曖昧さなく書く」に入る。