発表者はコンピュータや計算の仕組みに興味があり、
以前にはドミノ倒しで足し算を行う実験などを実施した。
ここでは、より高度な計算が出来る機構を求めてビー玉を転がすことに注目し、
機械式計算器の仕組みにならって四則演算ができる機構を作成する。
発表者が2020年に実施したドミノ倒しで足し算を行う実験
|
①
このハンドルを回して計算する。
回す方向によって、入力した値が足されるか引かれるかが決まっている。
② この部分が左右にスライドして 入力した値の10倍、1/10倍、100倍、1/100倍、… を入力できる。 ③ ここで値を入力する ④ 入力した値を足した/引いた結果が記録される。 掛け算なら答え、割り算なら余りが記録される。 ⑤ ハンドルを回した回数が記録される。 掛け算ならかける数、割り算なら商が記録される。 |
四則演算(足し算、引き算、掛け算、割り算)ができる事を目標にする。
よって、最低限必要なものは1桁の足し算、繰り上がり処理、補数を求める演算である。
基準となる数Cに対してC - xをxのCでの補数という
例えば十進法で 73 - 48 を計算したいとき、C = 100 - 1 = 99 として
48 の 99 での補数は 51 (9から元の各桁の数字を引いたものになっている)。
よって 73 + 51 + 1 = 73 + (100 - 1 - 48) + 1 = 73 - 48 + 100 より繰り上がりを無視すれば
73 - 48 と 73 + 51 + 1 (73 + 48の99での補数 + 1) の結果が一致する。
二進法で考えると…
1桁の足し算はXOR、繰り上がり処理はANDという演算となる。
A | B | A AND B | A XOR B |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
元の値の0と1を逆転した値(NOT)を求めることができればよい。
例:101 - 011 = 010を考える
011の1000-1=111の補数は100
101 + 100 + 001 = 1010 ≡ 010 (mod 1000)
A | NOT A |
---|---|
0 | 1 |
1 | 0 |
アメリカのDIYを中心とした記事を掲載するメディアMake:の Marble Adding Machine という記事でビー玉を転がして二進法での足し算をする機構が紹介されていました。 動画の方が分かりやすいのでYouTubeのリンクも貼っておきます。
|
①
左/右加算器(Marble Adding Machine)
② 入力装置 ③ カウンター(±1を入力) |
|
①
初期状態 コマは左に倒れている。 ② ビー玉が1つ落ちてきた状態 コマは右に倒れ、ビー玉が保持されている。 ③ ビー玉がもう1つ落ちてきた状態 コマは左に倒れ、保持されていたビー玉が捨てられる 左に落ちたビー玉は繰り上がりとして一つ上の桁に入力される |
| |||||||||||||||||||||||||
ビー玉が…
|
ビー玉がない=「0」、ビー玉がある=「1」とすれば…
入力1 = A | 入力2 = B | 出力2 = A AND B | 出力3 = A XOR B |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
出力2( = A AND B)は一つ上の桁に入力として使用する。
入力2を「1」に固定すると…
入力1 = A | 入力2 = 1 | 出力1 = A | 出力2 = A | 出力3 = NOT A |
---|---|---|---|---|
0 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 0 |
出力1と出力2はAの値をコピーでき、
出力1はそのまま出力する時に使用、
出力2は同じ値を使いまわす時に使用する。
出力2は-1倍を出力する時に使用する。
先ほどのMarble Adding Machineと同じ構造で、 ②入力装置と③カウンターからの値を受け取って足し合わせる。
|
(A)
ここのバーを押すことで最終的な計算結果が下に表示される。 (B) ここを引くことでロックが外れて2つセットで左右に動き、入力を2のべき乗倍できる。 (C) オーバーフロー検出器(右加算器のみ) |
|
(C)オーバーフロー検出器 オーバーフローが起きてビー玉が通ると鈴がなる。 |
計算したい値を入力し、その値の+1倍か-1倍を右加算器に入力する。
|
(A)
計算に使用するためのビー玉を溜めておく部分 (B) ここに二進法で値の入力する (C) このレバーで各計算を実行する (D) このレバーで値を再利用するかどうかを切り替える (E) このレバーで+1倍か-1倍かを切り替える |
中心付近に可動部分があり、持ち上げることで同じ値を何度も入力することができる。
+1 = 00000001(2) か -1 = 11111111(2) を左加算器に入力する。
|
(A)
計算に使用するためのビー玉を溜めておく部分 (B) 入力装置の計算実行に連動するレバー (C) このレバーで +1 か -1 かを切り替える |
1~10までの総和(= 55)を計算する様子
11×13 = 143 を計算する様子