表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
魔力ゼロですが、魔法はぜんぶコードなので問題ありません 〜前世プログラマーの少女、キーボードで異世界をデバッグする〜  作者: せい | 健康優良不良プログラマ
第1部 ③村を変える小さな発明

この作品ページにはなろうチアーズプログラム参加に伴う広告が設置されています。詳細はこちら

PR
48/211

第48話 数を数える機械

金の月四日の朝、昨夜グスタフ親方から受け取った小箱を抱えて父の工房に入った。


「お父さん。見せていい?」


父が手を止めた。机の上に小箱を置いて木の蓋を外す。父の眉がほんのわずかに動いた。


「……これは」


中には磨き上げられた歯車が八つ。


歯の数を数えた。十二、十六、二十四。三種類の歯数で揃えられている。木の軸も四本、長さがぴたりと揃っていた。


(——全部、誤差は爪の幅の十分の一だってグスタフさんは言ってた)


昨夜の親方の声が耳に残っていた。皮肉な響きのない、職人としての声だった。「これでもまだ俺の手で出来る限界だ。これより精密が要るなら、町の機械工に頼むしかねえ」——そう言って戸口で帽子を持ち上げてくれた。


父は黙ったまま箱の中を見つめていた。


◇◇◇


その日の午後、父の工房に座っていた。


机の上に小箱の歯車を全部並べた。横には自分の試作品——XOR の歯車組も並べてある。木の端材で粗く組んだ、見た目はガラクタの方だ。


(——『加算』を機械でやる)


頭の中でずっと前世の言葉が動いていた。


加算は計算の基本中の基本。けれど機械で再現するのは、思った以上に頭を使う。一桁の足し算でさえ「結果の桁」と「繰り上がりの桁」の二つを同時に出さないといけない。


(——半加算器)


前世のあの言葉が、頭の中で鮮明に立ち上がった。半加算器。Half Adder。入力二つ、出力二つの最小の加算回路。


A と B が両方とも一なら——結果の桁は〇、繰り上がりが一。

A と B のどちらかが一なら——結果の桁は一、繰り上がりは〇。

両方〇なら——両方〇。


(——XOR で結果の桁、AND で繰り上がり)


机の上の XOR 試作品を見た。AとBが違うときだけ出力が動く——『結果の桁』にぴったり。

そしてもう一つ、AND の機構が要る。AとBが両方とも回ったときだけ出力が動く——『繰り上がり』はこちらだ。


頭の中で配置が組み上がっていく。


二つの入力——AとBの歯車。それを並列に並べて、片方の経路は XOR に、もう片方の経路は AND に分岐させる。二つの出力——『結果』と『繰り上がり』。


「お父さん」


「ん」


父は机の向かいで置時計の修理を続けていた。


「これと、これを組み合わせたい」


XOR 試作品と、新しい精密歯車を指さした。


父はドライバーを置いて目を上げた。


「同じ入力を、二つの仕組みに同時に流すんだ」


「同時にか」


「うん」


父はしばらく黙って机の上の歯車を見た。それから手を伸ばして、十二歯の歯車を二つ、軸に通した。


「並列か」


「うん」


「やってみい」


それだけ言って、父はまた置時計に戻った。


◇◇◇


二つの軸を平行に配置した。Aの軸、Bの軸。それぞれに十二歯の歯車を二段重ねる。


——上段は XOR への入力。

——下段は AND への入力。


頭の中で歯車の連結図を描く。AとBが同時に回ると、上段は打ち消し合って止まる。下段は両方の力を合わせて回る。AかBだけ回ると、上段は動いて、下段は片方の力では動かない。


設計通りに組んでいく。錐で穴を開けて軸を通す。歯車の噛み合わせを確かめる。前世のソフトウェア設計と違って、こちらでは指先の正確さがすべてだった。


(——焦らない)


(——一段ずつ、確かめる)


XOR の経路を先に組んだ。Aだけ回す。出力が回った。Bだけ回す。出力が回った。AB同時に回す。出力は止まったまま。


(……生きてる)


声に出さずに呟いた。


次、AND の経路。これは初めて組む。設計図は頭の中だけ。十六歯の歯車を中継に置いて、AとBの両方の動きが揃ったときに初めて出力が動くように——。


最初の組み方では失敗した。Aだけ回しても出力が少しだけ動いてしまった。歯車の遊びだ。


軸を抜いて噛み合わせをもう少し詰めた。今度はBだけ回しても出力が動かない。AB同時——出力が、ゆっくりと、確かに回った。


(……できた)


XOR と AND が、一つの台の上で同時に動いた。


AB両方一なら——結果は〇、繰り上がりは一。

Aだけなら——結果は一、繰り上がりは〇。

Bだけなら——結果は一、繰り上がりは〇。

両方〇なら——両方〇。


「半加算器が、動いた」


胸の奥で熱が立ち上がった。


◇◇◇


父が振り返った。


ドライバーを置いて、机のこちら側に椅子を回してきた。半加算器の前にしばらく座って、何も言わずに眺めていた。


「リナ」


「うん」


「この『一』と『〇』は、なんだ」


うっ、と詰まった。


ここをどう説明したらいいか、ずっと考えていた。前世なら「ビット」「真偽」「論理値」と言えば済む話だが、この世界にはまだその言葉がない。


少し考えてから答えた。


「歯車が回ったか、回らなかったか」


「ふん」


「『回った』を一にして、『回らなかった』を〇にする。そうすると、足し算ができる」


父はしばらく半加算器を見つめてから、机の端の木の屑を二粒、つまんで台の上に並べた。


「……一と一を足したら、二だ」


「うん」


「だがこの機械は『〇と繰り上がりが一』しか出さん」


「うん」


「二、と書くには、桁が要る」


——あ。


頭の奥で何かがすっと冷えた。


父は職人だった。歯車と数字を毎日扱う人だった。彼は今、わたしの半加算器を見ながら一発で『次の問題』を見抜いた。


繰り上がり。Carry。


一桁の加算が動いただけでは、まだ計算機にはならない。繰り上がった『一』を次の桁に伝える仕組みが要る。そして次の桁では繰り上がりも含めて三つの入力を扱う加算が要る。


「全加算器が、要る」


声に出して呟いた。


父は意味の半分も分かっていないはずだった。それでも、彼の目はちゃんと『次の問題』を見ていた。


「お父さん」


「ん」


「もう一つ、半加算器を作りたい」


父は短く息を吐いて、笑うように口角を上げた。


「ふん。やってみい」


ドライバーをまた持って、置時計に戻った。


◇◇◇


机の上で半加算器がゆっくりと動きを止めていく。


わたしは小箱の中の歯車を見た。残りは四つ。十二歯が二つ、十六歯が二つ。これだけでもう一段、半加算器が組める。組んで、二つを繋げば、全加算器ができる。


(——明日)


(——明日、もう一つ組んで、繋いでみよう)


工房の窓から夕方の光が入ってきていた。秋の風が机の上の木の屑をかすかに揺らした。


(——一桁の加算じゃ、まだ計算機にはならない)


(——この八つの歯車は原理確認用。四桁を実用にするには、さらに精密な歯車を何十個も追加で揃えないと足りない)


(——でも、これは、ちゃんと始まりだ)


机の上の半加算器を、布で包んでそっと棚に置いた。明日、もう一つ組む。明後日、二つを繋ぐ。その先に——


「次は、繰り上がりだ」


声に出さずに呟いた。


外で麦の刈り取りを始めた村人の声がかすかに聞こえてきていた。


■あとがき・解説


第48話は、リナが「観測装置」だったXORの歯車組を、いよいよ「数を数える機械」へ組み変え始めた回でした。昨日届いた精密歯車、父アルベルトの短い「並列か」「やってみい」、机の上で初めて動いた小さな加算回路。今回はリナが頭の中で組み上げていた発想について、ゆるく解説していきます。


■この話で出てきた言葉


■「半加算器」——足し算を機械でやる、最小の単位


リナがこの話で組み上げたのが「半加算器」、英語で言うと Half Adder です。


なんだか厳めしい名前ですが、やっていることは単純で、「一桁の足し算をする機械」です。入力は二つ(AとB)、出力も二つ(結果の桁と、繰り上がりの桁)。それだけ。


たとえば 1+1=2 ですが、二進数だと 1+1=10 になります。下の桁は 0、上の桁へ 1 が繰り上がる。半加算器は、その「下の桁」と「繰り上がり」を同時に出す機械です。


リナは観測装置だった XOR(AとBが違うときだけ動く)を「結果の桁」に、AND(AとBが両方動くときだけ動く)を「繰り上がりの桁」に割り当てて、たった二種類の論理ゲートで一桁の足し算を実現しました。前世のコンピュータの中で何兆回と動いている加算回路の、いちばん原始的な姿です。


■「ビット」——回ったか、回らなかったか


父に「この『一』と『〇』は、なんだ」と訊かれて、リナが答えに詰まる場面がありました。


プログラマーの世界では、これを「ビット」と呼びます。Binary digit(二進数の桁)の略です。情報の最小単位で、「ある/ない」「オン/オフ」「真/偽」の二択しか表現しません。


リナは咄嗟に「歯車が回ったか、回らなかったか」と言い換えました。これは実はかなり本質的な翻訳で、コンピュータの中のビットも、突き詰めると電圧があるかないかという「物理的な二択」でしかありません。歯車の回転に置き換えても、電圧に置き換えても、原理は同じなのです。


■「繰り上がり」——次の桁に伝える信号


父アルベルトが、半加算器を見ながら一発で「桁が要る」と言い当てた場面。あれは職人としての直感もあったと思いますが、計算の本質を突いた一言でした。


一桁の足し算しかできない機械は、まだ「計算機」ではありません。二桁、三桁、四桁——桁が増えるたびに、下の桁から繰り上がってきた「一」を次の桁へ伝える仕組みが必要になります。前世の言葉で言うと「キャリー(Carry)」。リナが最後に呟いた「全加算器が、要る」というのは、まさにそこへ踏み出す宣言でした。


寡黙な父が「ふん。やってみい」と背中を押してくれる短い言葉。グスタフ親方が「何を作るかが見たいだけだ」と置いていった精密歯車。三人の手が、机の上で少しずつ揃い始めた一日でした。


次の話もお楽しみに。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ