toyoshiの日記

株式会社トクイテンを有名にするための日記です

円周率を計算機械なしで計算する方法。折りたたみ北京を読んだ

折りたたみ北京 現代中国SFアンソロジーを読みました。SF作家であり翻訳家でもあるケンリュウ氏が選んだ中国人作家の短編集です。ケンリュウ氏の前書きから大変読み応えがある1冊です。

私のお目当ては三体の著者の劉慈欣による「円」という作品でした。三体にも出てくる人間計算機のお話です。

(結末以外のネタバレを含みます)

舞台は7つの国が弓や剣で戦っている戦国時代の中国です。1番の強国の君主である政王は不老不死を追い求めていました。そこに荊軻という学者が、不老不死の秘密は円周率を求めることで解明できると提案します。なぜなら円周率は決して繰り返されることのない数列でできており、天が地に与えた基本則なのだから、この中に様々な秘密が隠されているはずだといいます。

政王はさっそく計算せよと命じますが、荊軻が検討したところ優秀な学者を集めても2年で300桁、一生かかっても3000桁ほどしか計算できないことがわかります。

そこで命がけで学者が考えたのが、兵隊と旗を使った方法でした。

「諸君の名は知らない」荊軻は二人の兵の肩を叩いた。

「きみたち二人には数字の入力を担当してもらうので、それぞれ〈入力一〉、〈入力二〉と呼ぶ」最後の兵をしめして、「きみには数字の出力を担当してもらう。そこで〈出力〉と呼ぶ」  

そして必要な位置に動かした。

「こうだ。三角形に並べ。頂点に〈出力〉、底辺の両端に〈入力一〉と〈入力二〉が立て」

「楔形攻撃陣形と命じたほうが早いぞ」  

政王はにやりとして荊軻を見た。  

荊軻は六本の旗を用意していた。白三本、黒三本で、三人の兵に白黒一本ずつ持たせた。

「白は数字の零、黒は一をあらわす。よろしい、ではよく聞け。〈出力〉、きみはうしろむきになり、〈入力一〉と〈入力二〉にむきあえ。そして二人がどちらも黒旗を上げたら、きみも黒旗を上げろ。それ以外の場合は白旗を上げろ」

—『折りたたみ北京 現代中国SFアンソロジー (新☆ハヤカワ・SF・シリーズ)』ケン リュウ, 中原 尚哉・他著 https://a.co/3AQxyDh

これはデジタル回路の基本であるAND回路の動きをしたものになります。さらに荊軻は、OR, NAND, NOR, XOR, XNOR, スリーステート、NOTなどの基本的な回路を全て少人数の兵士と旗で実現します。我々が使っている現実のコンピューターやスマートフォンもこれらの回路の組み合わせで計算をしています。つまり荊軻は兵士と旗でデジタル回路(≒トランジスタ真空管)を作り、それらを組み合わせることで計算機(≒CPUやメモリ)を電気なしで実現しまったのです。

しかし基本はできたとはいえ実際に円周率を計算するとなると大変です。計算するには300万の兵士が必要で兵士の訓練には1年、計算には10ヶ月がかかりそうです。300万の兵士は政王のほぼ全てにあたります。荊軻は政王の許可を得て着手しますが300万の兵士をどのような計算機にするのか、政王の夢はかなうのか・・・

f:id:toyoshi:20200422134638p:plain

上図の写真は私が以前作った4bitのCPUです。これもAND回路などの組み合わせでできています。できるのは16byteのプログラムで8個ついたLEDを自由に光らせることだけです。左の青いスイッチ群が入力なのですがこれが16byteで英数字で言うとたったの16文字、日本語なら約5文字分です。これらを表現するだけでも兵士が128人必要ということになります。この単純なCPUだけでも2-300人の兵士が必要になります。

やっていることは不思議でもなんでもなく現実でもできることなのですが、300万の兵士を並べて規則通りに動かすと言うのはどんな光景なんだろうと想像するとワクワクしてしまいます。おすすめです。