一覧へ 情報Ⅰ (3) 第3回 | 演算の仕組みとコンピュータの限界
情報Ⅰ (3) コンピュータとプログラミング | 第3回

演算の仕組みとコンピュータの限界

コンピュータは足し算しかできず、しかも 0.1 + 0.2 を間違える。その両方を自分の手で確かめる

50分
教師用メモ

準備 教室コードは新しいものにする。「教師」を押す。体験 01〜03 は端末内で完結する。

時間配分 前回まとめ・目標 4分 / 節1 3 つの回路 16分 / 節2 足し算の回路 12分 / 節3 限界 12分 / まとめ・自己評価・ふりかえり 6分

教科書: 新編情報Ⅰ 23 演算の仕組みとコンピュータの限界(p.68)、章末資料 2 進法の足し算回路。

この回の評価(指導要領 (3) ア(ア) イ(ア)。演算の仕組み、値の範囲や精度が有限で計算結果が誤差を含みうること。単元設計は 単元設計のページ)

  • 知識・技能 AND・OR・NOT の真理値表を書き、半加算器で 1 + 1 = 10 になることを説明している(体験01・02)
  • 思考・判断・表現 0.1 + 0.2 がずれる理由を「有限のビット数」から説明し、精度とデータ量のトレードオフとして捉えている(体験03)
  • 態度 意図しない計算結果が出たとき、データの扱い方や精度に目を向けようとしている(ふりかえり)

ふりかえりの枚の自己評価の分布を見て、「まだ」が多い目標を次回冒頭で拾い直す。

前回のまとめ

CPU は番地を進めて、読んで、実行するだけ

命令を読む→実行する→次へ|ADD で 7 + 5 = 12

前回、CPU に ADD(足す)という命令があった。では CPU の中で、足し算はどう行われているのか。答えは、電気のスイッチの組み合わせ。今日はスイッチを自分で押す

2 × 4 も、8 − 6 も、コンピュータは足し算でやっている

教師用メモ

教科書 p.68 の導入: 2×4 は 2 を 4 回足す。8−6 は 6 の補数 4 を足して 12、桁上がりを無視して 2。6÷2 は 0 になるまで引く(=補数を足す)。板書で 1 分。

今日の目標

授業の終わりにできるようになること

01
AND・OR・NOT の 3 つの回路の真理値表を、スイッチを押して作れる
02
半加算器で 1 桁の 2 進数の足し算ができる仕組みを説明できる
03
コンピュータの計算に誤差が出る理由を、有限のビット数から説明できる
01 | 16分
3 つの回路

スイッチを押して表を埋める

02 | 12分
足し算の回路

1 + 1 が 10 になる

03 | 12分
限界

0.1 + 0.2 を計算させる

SECTION 01

3 つの回路

両方押したら光る。どちらか押したら光る。押すと消える

2つの押しボタンと1つの電球がつながった簡単な回路を、高校生2人が押して電球が点くかを確かめている
体験 01

スイッチを押して、真理値表を埋める

左の A・B を押して 0 と 1 を切り替える。右の 3 つの回路の電球がどう光るかを見る。下の表は、灰色の欄が入力の組み合わせ(決まっている)、白い欄が答える場所。青いボタン 0 と 1 のどちらかを押して予想を入れ、4 通り全部を埋めてから「答え合わせ」

AND
0
両方 1 のときだけ 1
論理積
OR
0
どちらか 1 なら 1
論理和
NOT(A)
1
A を反転
否定
AND
AB出力を選ぶ
OR
AB出力を選ぶ
NOT
A出力を選ぶ
教師用メモ

進め方(12分) 全員が 4 通り押して、表を予想で埋めて答え合わせ(8分)。そのあと「AND は掛け算、OR は足し算(1+1 は 1 止まり)、NOT は反転」の覚え方。

言葉 論理演算 = 0 と 1 だけを使った計算。論理回路 = 論理演算を行う回路。真理値表 = 入力と出力の全組み合わせの表。どんなに複雑な処理も、この 3 つの組み合わせで作れる。

身近な例: AND = 両方のボタンを押すと開く安全装置。OR = どちらのスイッチでも点く階段の電気。NOT = 押している間だけ消える。目標 01。

SECTION 02

足し算の回路

1 + 1 = 10。答えの桁と、桁上がりの桁

2つのスイッチから線が分かれて2つの小さな箱に入り、その先に「答え」と「桁上がり」の2つの電球がついている装置を高校生が見ている
体験 02

半加算器 | 2 つの回路で 1 桁の足し算

A + B を 2 進数で計算する回路。「答え(S)」は A と B が違うときだけ 1(XOR)。「桁上がり(C)」は両方 1 のときだけ 1(AND)。A・B を押して 4 通りを確かめ、表の 0 と 1 のボタンで C と S を埋める

S = 答えの桁
0
A と B が違うとき 1(XOR)
C = 桁上がり
0
両方 1 のとき 1(AND)
A + B
ABC を選ぶ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 進法のよさがある(教科書章末資料)。

まとめ 01・02

3 つの回路の組み合わせで、足し算ができ、足し算で全部できる

AND・OR・NOT→半加算器(1 桁)→全加算器を並べる(何桁でも)→足し算 + 補数で引き算・掛け算・割り算
論理演算・論理回路0 と 1 だけの計算と、それを行う回路。AND(両方 1 で 1)、OR(どちらか 1 で 1)、NOT(反転)。真理値表で入出力を表す
半加算器1 桁の 2 進数の足し算。答え S は XOR、桁上がり C は AND。1 + 1 = 10
足し算だけで四則演算掛け算は足し算の繰り返し。引き算は補数(足して桁が上がる最小の数)を足す。割り算は 0 になるまで引く。回路が単純だから速い
教師用メモ

「コンピュータは複雑な計算を特殊な方法で解く装置ではなく、単純な計算を高速に繰り返す装置」(教科書)。前回のクロックと結ぶ。

SECTION 03

限界

0.1 + 0.2 は 0.3 か

電卓で0.1と0.2を足した高校生が、画面に出た長い小数を見て首をかしげている
体験 03

コンピュータに小数を足させる

2 つの数を入れて「計算」。この端末のコンピュータが実際に出した答えがそのまま出る。まず 0.1 と 0.2。次に 4.2 − 4.3 になるよう「4.2」と「-4.3」。整数(3 と 4)でも試す

+=—
1 つ目の数を、コンピュータが 2 進数の小数で持っている中身(64 ビットのうち小数部分の先頭)

※ 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。

コラム「最強モンスターが最弱に」(ビット数を超えて予期しない動作)はオーバーフローの例。

まとめ 03

コンピュータの限界 | 有限のビット数で表すから、誤差が出る

誤差の原因コンピュータは決められたビット数でデータを扱う。2 進数で無限に続く小数(0.1 など)は途中で打ち切られ、本来の値とわずかにずれる
範囲の限界ビット数を超える大きな数は表せない(オーバーフロー)。ゲームの体力が一周して最弱になった例
対策ビット数を増やす(精度が上がるがデータが増える)。整数で扱う(円単位)。誤差があることを前提に、意図しない結果が出たら精度と手順を疑う

万能に見えるが、足し算を高速に繰り返す、有限の桁の機械。限界を知っている人が、正しく使える

教師用メモ

目標 03。次回から「手順」の話(アルゴリズム)。回路の上で動く命令の並びを、人がどう書くか。

道具で作る

AND と NOT だけで、NAND を組む

AND と NOT だけをつないで NAND を作り、真理値表がこの回のものと合うかを確かめて、作れた回路の名前を出す

論理回路シミュレータAND・OR・NOT をつないで、自分で回路を組む
  1. 「この枚で開く」を押す
  2. AND と NOT をつないで NAND を作る
  3. 真理値表が、この枚のものと合うか確かめる
この授業のページの中で開く。終わったら「閉じてこの枚に戻る」で戻る
演算誤差けた数の限りが、計算結果にどう出るかを見る
  1. 「この枚で開く」を押す
  2. 小数の足し算を 2 つ試す
  3. 誤差が出る組み合わせを 1 つ見つける
この授業のページの中で開く。終わったら「閉じてこの枚に戻る」で戻る
作ったものを、一文で
みんなの作ったもの
教師用メモ

進め方 作れた人から出す。うまくいかない形も価値がある。詰まっている生徒には、手順の何番で止まっているかを聞く。

6分。回路は自分で配線できる。誤差はビット数を変えて見る。

道具は外で公開されている Web アプリ。この授業のページの中で開くので、別のページへは移らない。閉じれば、そのままこの枚に戻る。ブラウザの中で動き、入力はこの授業のサーバーには送られない。

今日のまとめ

3つの目標に、自分の操作で答える

01
3 つの回路 AND は両方 1、OR はどちらか 1、NOT は反転。スイッチ 4 通りで真理値表を埋めた
02
半加算器 S は XOR、C は AND。1 + 1 = 10。足し算の回路と補数で四則演算が全部できる
03
限界 0.1 + 0.2 は 0.30000000000000004。有限のビット数で打ち切るから。整数は正確
自己評価

今日の目標、自分はどこまで

3 つの目標それぞれに、できた/だいたい/まだ、を 1 つ選ぶ。右の帯にクラス全体の分布が出る

今日の目標、自分はどこまで | 1 つずつ選ぶ
01AND・OR・NOT の真理値表を作れる
02半加算器で 1 桁の足し算ができる仕組みを説明できる
03計算に誤差が出る理由を有限のビット数から説明できる
できただいたいまだ
教師用メモ

1 分。「まだ」が多い目標は、次回の冒頭で拾い直す。

ふりかえり

コンピュータの計算を「疑う」場面を一つ

一文でよい。「〇〇のときは、△△だから結果を確かめる」の形

みんなの疑う場面
教師用メモ

3 分。次回はアルゴリズム。「手順を曖昧さなく書く」に入る。