見出し画像

設計あれやこれや13

計算式

 コンピュータはその昔、電子計算機と良く言われてました。子供の頃は、みんなの科学というテレビ番組で、1と0の2進法で計算をおこなう機械である、という話が凄く印象的でした。

 40年も前の事、仕事でNECのワンボードマイコン、TK80を組み立てる機会を得たのですが、その時にわかった事は、コンピュータのプログラムに使用する命令語には、足し算と能力不足な引き算、それにAND、OR、NOT、回転、などの論理系の命令しか無いんですね!
 足し算は、繰り上がりを判断する為のフラグ機能が用意されているのですが、引き算には、この機能が有りません。その為、桁数の多い計算は出来ない事を意味します。

 まともなのは、足し算だけなのに、どうして掛け算や割り算ができるのだろうか? 
 不思議に思いませんか? 

 私自身、計算としては足し算とフラグの立たない中途半端な引き算しか無いのに、どうやって計算するのか、掛け算や割り算は、どうしたら可能なのか不思議でした。

 そこで、足し算と論理命令で、どうやったら、色々な計算が出来るかを、その当時、随分と悩み、資料等いろいろ漁ってみました。

 コンピュータでは、桁数の一番小さい単位をbit といいます。例えば、8bit で表すと次のようになります。

2進数         10進数
11111100      -4
11111101      -3
11111110      -2
11111111       -1
00000000    0
00000001     1
00000010     2
00000011     3
00000100    4
00000101     5
00000110     6
00000111      7
00001000     8
00001001      9
00001010    10
00001011     11
00001100     12
00001101     13
00001110     14
00001111      15
00010000    16

 これで、わかるように最上位の bit が1の時、マイナスになることがわかります。
マイナス表示にするには、NOT(反転)をして、1 を足す、という事で表せます。
   3 は、00000011
   反転すると、11111100
   1を足すと、11111101
 2進数の −3 になる事が分かります。
 この関係を2の補数と言います。
 これで、補数を利用すれば足し算のみで、引き算ができる事が分かります。

 では、こんなに貧弱な計算能力しかないのにどうやって、掛け算を実現するのでしょうか?

 その頃、勤めていた会社の社長に、話してみた所、そんなのは簡単じゃないか。例えば、12×3であれば、12を3回、足せばいいわけだろう、という様な説明をされました。

 早速、TK80を使用して8080CPU のプログラムを組み、実行してみました。
 結果、この方法でプログラムを実行してみると、時間がかかり過ぎてしまいました。

 例えば、12345×6789 を計算すると、12345を6789回、足す訳で、桁数が増える程、計算に時間が掛かる事になります。

 とても、使い物になりません。
 計算方法については意外な所にヒントが有りました。それは、小学生の時分に教わった計算方法です。(図A)

 シフトして最下位 bit が1であれば足してを繰り返せば、掛け算が出来ます。8bitの場合、8回、繰り返すだけなので、かなりの時間短縮です。
 では、割り算はどうしたら良いでしょうか?
 シフトして引けたら1、引けなかったら0を置いて行けば良いのです。
 これも、小学生の時分に教わった計算方法です。(図B)
 意外に感じませんか?

 困った時は、原点に戻る事が必要かも知れません。
 私の場合、小学生まで、戻ってしまいましたが。

 ここまで来ると、応用範囲は格段に上がります。

 では三角関数、sin、cos、tanはどうするのでしょうか?
 実はテイラー展開で求めるという事です。パソコンのBASICに昔、搭載されていた式だそうで、階乗計算ですので掛け算です。その掛け算は足し算から出来ているのですから。(図C)
 当然、対数、expなんでもです。

 こういった事を調べてみると、全ての計算は、足し算1つで、出来てしまうようです。

 凄い発見だと思いませんか?
 それは、今の最新のコンピュータでさえも、全て、足し算で出来ているのかも知れません、たぶん。
 いや、むしろ世の中の数字を扱うという事は、全て足し算のみ、なのですよ、きっと。

 所詮、コンピュータは、1と0のみでできている。又は、5Vと0V、の電圧の違いの羅列でしか無いのだから。

 お前、たいした事ないなぁ、と言ってやるんだが、最近はパスワードが違いますとか、直ぐ反乱を起こしますよね。

 気が付くと、たいした事ない物に使われている自分がここにいます。

 今のパソコン、スマホ、タブレットの類いは、画面をマウスや指で触った時、その位置に有ったアプリが起動したり、お絵描きソフトで絵を描いたり、画面と操作が連動しているという事は、何気に使用してます。

 世の中で一番最初に画面と操作の連携を考えたのがゼロックス社のパロアルト研究所に勤めていたアラン•ケイだそうです。
 ただ、その方法が画面の位置情報について、メモリを大量に使用する、いわば力技で表現していたという話です。

 Apple 社のビル•アトキンソンは、ゼロックスのパロアルト研究所でアラン•ケイのコンピュータを見学してから、これをMacintosh に組み込むには、どのような計算式を作れば実現出来るかという事で眠れない日が続いたという事です。

 初代 Macintosh は、搭載メモリが少ない為、沢山のメモリを消費する力技という事は出来ません。
 画面の操作に関する計算式をコンパクトに作り、画面とマウスを介して、人とコンピュータを継ぐためには、必要だったという事です。

 ある時、この計算式のヒラメキが有って、これによって Macintosh の開発の道筋が見えてきた、という話を読んだ事が有ります。

 今はマウスより、指で画面をタッチするため、指が主流ですよね。皆さん、毎日、スマホ触っていますものね。

 ウルトラマンのハヤタ隊員が、腕時計型のテレビ電話で連絡を取っている事を思い出します。 
 Apple Watch は、まだテレビ電話になっていないですね。
 アラン•ケイの考えた、Dynabook はApple のiPad で実現したのでしょうね。

 ところで、初代 Macintosh で使われている3.5インチのフロッピーデイスクドライブがソニー製だという事、知っていますか。意外な所で、日本のメーカも関わりを持っていたんですね。

 設計の仕事をしていると、どの分野でも、いつも計算を求められるものです。
 今は、グーグル先生という便利なツールも有るのですが、実際にググってみても、欲しい事は出てこなかったりします。

 私の頃は、社内には、専門で良く分かっている人がいるのだから、その人に聞くようにとか、いろいろ言われます。聞いても、それでわかるとは限らないという事もありました。

 もし、マイクロコンピュータで、掛け算や割り算の計算方法が導き出せなかったら、きっと別の部署に配属という事になっていたんでしょうね。そして、いろいろな設計業務にたずさわる事も無かったのだろうと思います。

 設計を志す皆さんが、困難な状況であっても、うまく計算式、または、それに準ずる方法に巡り合う事ができます様に!

いいなと思ったら応援しよう!