1. ひきざんの ボタンは、ひきざんを して いるの?
1. 引き算のボタンの中で、本当に引き算をしているのか
1. 減算は加算に置きかえられる ── 補数という考え方
でんたくで 「5 − 2」を おすと、3と でます。この とき でんたくの 中では、ひきざんを して いるのでしょうか。
コンピュータでは、ひきざんを たしざんに おきかえて 考える ことが あると いわれます[6]。たとえば 「2を ひく」かわりに、「ある 数を たす」のです。
たとえば、ふたけたで 83 − 37 を します。37に 63を たすと ちょうど 100です。そこで、83に 63を たすと 146。いちばん 左の 1を すてると、46に なります。これが 83 − 37の 答えです。
ただし 本当に どの でんたくも こう して いるとは かぎりません。これは「考え方」の 話です。
10に足りない分を足す
引き算を足し算に変える考え方が、補数です。10進の2桁なら、100に足りない分を使います。37の補数は、足すと100になる63です。
83−37を計算するとき、37を引くかわりに63を足します。83+63=146。先頭の余分な1を捨てると46になり、これは83−37の答えと同じです。
2進数でも同じ
コンピュータが使う2進数でも、同じことができます。たとえば5−2は、2の補数(4桁で1110)を5(0101)に足すと、桁があふれた分を捨てて0011、つまり3になります[6]。
ただし、これは考え方の説明です。電卓の機種ごとに、中身が補数式とは限りません。では、足し算そのものは、回路でどう作るのでしょうか。
コンピュータは減算を、補数を使った加算に置きかえて処理する考え方がある[6]。10進2桁で83−37を求めるとき、37の10の補数である63(足して100になる数)を83に足すと146になり、最上位の余分な1を捨てれば46となって、減算の結果と一致する。
2進数でも同様に、4桁で5−2を求めるなら、2の補数1110を5(0101)に足し、桁あふれした最上位を捨てると0011、すなわち3を得る。こうすれば、足し算の回路を1つ持てば引き算にも使い回せる。ただし、これは考え方の説明であり、電卓の機種ごとの実装が補数式とは限らない。そこで、土台である加算が回路でどう実現されるのかを次に見る。
2. たしざんは、どうやって 回路で するの?
2. 足し算の回路は、「半分の足し算」を2つ組み合わせて作る
2. 半加算器と全加算器が、繰り上がりを扱って加算を行う
ゆびで 1と 1を たすと 2です。でも コンピュータは 0と 1だけを つかう 2しんほうなので、1と 1を たすと 「10」と なって、となりの けたに 1が くりあがります。
この「たして、くりあがりを 出す」しくみを 回路で 作った ものが、たしざんの 回路です[5]。
まず、2つの 数を たすだけの 小さな 回路を 作ります。つぎに、これを 2つと、もう1つの 小さな 回路を くっつけると、前の けたからの くりあがりも うけとれる 回路に なります。
ちいさな 部品を くみあわせて、大きな 計算を する。でんたくは、そういう くふうの かたまりです。
1ビットの足し算には繰り上がりがある
2進数の1桁(1ビット)どうしを足すと、0+0=0、0+1=1、1+0=1、そして1+1=10になります。この「10」の1が、1つ上の桁への繰り上がりです。
2つの1ビットを足して、和と繰り上がりを出す回路を、半加算器といいます[5]。
2つ重ねると、前の桁の繰り上がりも受け取れる
半加算器だけだと、下の桁からの繰り上がりを受け取れません。そこで、半加算器2つとOR回路1つを組み合わせます。これが全加算器で、繰り上がりを受け取って足せます[5]。
全加算器を桁の数だけ並べれば、何桁でも足せます。引き算も、補数にすれば同じ回路で処理できる、という考え方でした。だとすると、この足し算の回路をなるべく少ない部品で作ることが、電卓を小さくする近道になります。
3. 1000この ところを 341こで。リレーの でんたく
3. 約1000個が要る計算を、341個のリレーで ── 14-Aの工夫
3. 14-Aは、2進法と5進法を併用して341個のリレーで四則演算した
1957ねんの 6月、かしおの 4人の きょうだいが、「14-A」と いう でんたくを うりだしました。これが カシオ計算きの はじまりです[1]。
14けたの たしざんや ひきざん、かけざんや わりざんが できます。中に 入って いたのは、でんじしゃくの はたらきで スイッチを 入れたり 切ったり する 部品、リレーです。
ふつうなら、だいたい 1000この いると いわれる 計算です。でも 14-Aは、341こで すませました。2しんほうと 5しんほうを つかった くふうの おかげだと いわれます[1]。
答えが 出るまで 5〜6秒。計算中の 音が 小さくて、とても しずかな でんたくでした。
電磁石でON/OFFするスイッチを341個
1957年6月、樫尾(かしお)家の4兄弟が、世界初の小型の純電気式計算機「14-A」を商品化し、カシオ計算機を設立しました[1]。
回路の部品はリレーです。電磁石の力でスイッチを入れたり切ったりする部品で、14-Aでは341個を使い、14桁の四則演算をしました。
2進法と5進法を併用した14-A
14桁の四則演算は、リレーで作ると約1000個が必要とされます(これは目安で、実測値ではありません)。14-Aは、2進法と5進法を併用して341個に抑えました[1]。341÷1000でおよそ3分の1です。どのリレーが何を表すのかの細かい割り当ては、ここでは取り上げません。
計算時間は5〜6秒で、計算中の音は小さく、静かな電卓でした[1]。
では、部品を減らす努力は、この先どこまで進んだのでしょうか。
カシオ計算機は1957年6月、樫尾4兄弟が世界初の小型純電気式計算機14-Aを商品化して創業した[1]。リレーは電磁石でONとOFFを切りかえる部品で、14-Aはそれを341個用い、14桁の四則演算を行う。
14桁の四則演算をリレーで実現する場合、通常は約1000個が必要とされる。これは一般に言われる目安であり、実測値ではない。14-Aは2進法と5進法を併用することで、約3分の1にあたる341個で実現した(341÷1000=0.341)[1]。計算時間は5〜6秒で、計算中の音は小さく静かだったとされる。2進と5進の具体的な割り当て(どのリレーが何を表すか)までは、参照した資料に書かれておらず、ここでは扱わない。
部品の数を減らす工夫は、電卓の歴史の最初から中心にあった。
この工夫は、その後トランジスタやLSIへと主役を替えながら、部品を減らし小さくする方向に進んでいく。
4. 25キロの でんたくが、9ねんで 200グラムに
4. 25kgの電卓が、9年で200gに ── 部品が変わると小さくなる
4. リレー・真空管・トランジスタ・LSI ── 電卓の小型化と価格の推移
1961ねんの イギリスで、世界で はじめての 電子しきの でんたくが 出されました[2]。ネオンガスを 入れた 真空管を つかった ものです。でも ねだんが 高くて、あまり うれませんでした。
1964ねん、シャープが 世界で はじめての 「オールトランジスタ」の でんたく CS-10Aを うりだしました。おもさは 25キロ。ねだんは 535,000円です[3]。
9ねん後の 1973ねんの EL-805は、おもさ 200グラム、ねだんは 26,800円です[3]。おもさは 125ぶんの 1、ねだんは およそ 20ぶんの 1に なりました。
ただし これは おもさと ねだんの くらべで、計算の はやさの くらべでは ありません。
真空管からトランジスタへ
世界初の電子式の卓上計算器は、英国のサムロック・コンプトメーター社のアニタ・マーク8だとされます。ネオンガスを封入した真空管を使い、1961年10月のロンドン博覧会に出品されました。高価で売れませんでしたが、日本のメーカーに大きな影響を与えたといわれます[2]。
1964年、シャープは世界初のオールトランジスタ式の電子式卓上計算機CS-10Aを発売します。トランジスタ530個とダイオード2300個を使い、重さ25kg、価格は535,000円。電動式計算機と同じくらいの値段と重さで、速くて静かだったといいます[3]。
LSIで25kgが200gに
1969年のQT-8Dは、LSI4個とIC2個で、重さ1.4kg、価格99,800円。1973年のEL-805は、LSI1個と液晶ドライバ2個で、重さ200g、価格26,800円の液晶ポケット電卓です[3]。
CS-10Aの25kgからEL-805の200gへ、9年です。25÷0.2=125で、重さは約125分の1。価格も535,000÷26,800で約20分の1です。ただし、これは重さと価格の比で、性能の比ではありません。
この小型化の途中で、電卓から思わぬものが生まれます。
世界初の電子式卓上計算器は、英国Sumlock-ComptometerのAnita Mark 8で、1961年10月のロンドン博覧会に出品された。ネオンガス入りの真空管を使い、高価で売れなかったが、日本のメーカーに大きな影響を与えた[2]。
これを受けて日本のメーカーは電卓の開発を競った。シャープは1964年に、世界初のオールトランジスタ式電子式卓上計算機CS-10Aを発売した。トランジスタ530個とダイオード2300個で構成され、重さ25kg、価格535,000円と、電動式計算機と同程度の価格・重さながら、速く静かな点が優れていた[3]。
部品はこのあと、1個のチップに多くの回路を載せるLSIへと置きかわる。1969年のQT-8DはLSI4個・IC2個で1.4kg、99,800円。1973年のEL-805はLSI1個と液晶ドライバ2個で、200g、26,800円まで下がった[3]。CS-10Aから9年で、重さは25÷0.2=125分の1、価格は約20分の1である。ただしこれは重さと価格の比であって、性能の比ではない。
LSIが主役になると、回路の組み方そのものが問題になる。従来の電卓は、基板の配線で論理を組むワイヤードロジック方式だったからだ。ここから、世界初のマイクロプロセッサが生まれる。
5. でんたくの 注文が、コンピュータの あたまを 生んだ
5. 電卓の注文から、世界初のマイクロプロセッサが生まれた
5. ワイヤードロジックからプログラム方式へ ── ビジコン141-PFと4004
むかしの でんたくは、部品を はいせんで つないで 計算の きまりを 作って いました。しゅるいが かわるたびに、はじめから 作りなおす ひつようが あり、とても たいへんでした[2]。
1969ねん、日本の ビジコンと いう 会社が、アメリカの インテルに でんたくの 部分を 作って くれるように たのみました。ビジコンは、プログラムで 動かす やりかたを 考えました[2]。
はじめの 考えでは 12この とくべつな チップが いりました。それを、4004を ふくむ 4この チップで 作る 考えに かわりました[4]。
そして 1971ねん、世界で はじめての マイクロプロセッサ4004が 生まれました。でんたくの 開発の とちゅうでの できごとでした[2]。
配線で作る方式の悩み
それまでの電卓は、基板の上の配線で計算の手順(論理)を組むワイヤードロジック方式でした。設計に手間がかかり、機能を変えるのも難しい方式です[2]。
ビジコンは、相手先ごとに仕様のちがう電卓を短期間に作る必要がありました。そこで、プログラムで動かす方式を考えます[2]。
12個を4個に
1969年、ビジコンはインテルに電卓141-PFの設計を依頼しました。もとの案は12個のカスタムチップを使うものでしたが、これが4004を含む4つのチップで実現する案に変わったと、MONOistは紹介しています[4]。
世界初のマイクロプロセッサ4004は、電卓などに使う汎用LSIの開発の途中、1971年3月に誕生したと、ビジコンの嶋正利さんは書いています。発表は1971年11月15日です[2]。
10進の電卓と2進のチップをつなぐ
ビジコン側は10進の数を扱う案を、インテルのテッド・ホフさんは4ビットの2進数を扱う案を出し、4ビットの2進プロセッサが生まれました[2]。
ところが2進だけの演算では、10進の電卓には困ります。そこで、足したあとで結果を10進に直す「10進補正命令」が加えられました[2]。電卓は10進で数を見せるので、2進のチップの中に10進へ戻す仕事が必要だったのです。
この10進と2進のずれは、思わぬところでも顔を出します。
従来の電卓は、部品を基板上の配線でつないで論理を構成するワイヤードロジック(布線論理)方式で、設計工数が多く、機能の変更が難しかった。ビジコンは、相手先ごとに仕様の異なる電卓を短期間に開発する方法として、プログラム論理方式を採用した[2]。
1969年にビジコンが電卓141-PFの設計をインテルに依頼したことが、4004開発のきっかけになった。12個のカスタムチップを使う設計案が、4004を含む4つのチップで実現する案に変わったとされる[4]。
世界初のマイクロプロセッサ4004は、電卓やオフィス機器向けの汎用LSIを開発する過程で、1971年3月に誕生した(嶋正利氏の記述)。発表は1971年11月15日である。嶋氏はn桁の10進データを扱う案を、インテルのテッド・ホフ氏は4ビットの2進データを扱う案を出し、結果として4ビット2進プロセッサとなった[2]。
2進数のみの演算では電卓に適さないため、加算後に使う10進補正命令が追加された[2]。これは、10進の数字を4ビットで持ち、足し算のあとで繰り上がりを10に直すために必要だったと説明できる(BCDという語は原文にないため、補足説明である)。
では、2進と10進のずれは、普段の計算に何をもたらすのか。
6. 0.1 + 0.2が 0.3に ならない こと、ありますか
6. 0.1+0.2が、0.3にならない計算機がある
6. 2進の浮動小数点と10進 ── 0.1+0.2はなぜ0.3にならないのか
0.1と 0.2を たすと 0.3。でんたくで やれば、そのとおりに なります。
ところが、プログラムを 書く 言葉の 多くでは、0.1 + 0.2が 0.3に ならない ことが あります[7]。0.1が 2しんほうでは、ちょうどの 数に ならないからです。
3分の1を 小数で 書くと 0.333…と ずっと つづくのと 同じです。2しんほうでは 0.1も 0.2も 0.3も、小数の 数字が ずっと つづいて、ちょうどの 数に なりません。
でんたくは、10しんほうで 数を もつ 作りの ものが 多いと いわれます。だから 0.3と 見えるのです。ただし すべての でんたくが そうとは いえません。
10進の0.1は、2進では終わらない
10進の0.1は、2進に直すと、小数点以下の数字がいつまでも続く小数(循環小数)になります。0.2や0.3も同じです。3分の1を10進で書くと0.333…と続くのと、同じような話です。
ところが、コンピュータが小数を扱う形式(2進の浮動小数点)は、決まった桁数で打ち切ります。そのため、0.1も0.2も0.3も、正確には表せません[7]。多くのプログラム言語で0.1+0.2が0.3にならないのは、このためです。
電卓は10進で扱う設計が多い
電卓は、10進のまま数を扱う設計が多いといわれます。そのため、0.1+0.2は0.3と表示されます。ただし、「すべての電卓が10進」とまでは言い切れません。電卓の方式についての記述は、二次的な資料にとどまります。
前の章の10進補正命令は、10進の電卓と2進のチップをつなぐ工夫でした。浮動小数点の誤差とは別の話です。では、関数電卓のsin(サイン)やlog(ログ)は、どうやって出しているのでしょうか。
10進の0.1は、2進では循環小数になる。コンピュータが一般に使う2進の浮動小数点形式は、有限の桁で打ち切るため、0.1、0.2、0.3のいずれも正確には表せない[7]。これが、多くのプログラム言語で0.1+0.2が0.3にならない理由である。
電卓は10進で数を扱う設計が多く、0.1+0.2=0.3と表示される。これは電卓の方式一般についての記述で、二次資料による。そのため「すべての電卓が10進」とまでは言えない。
4004の10進補正命令も、10進の電卓と2進のチップをつなぐ工夫だった。浮動小数点の誤差とは別の話である。
それでは、足し算と引き算しかできないはずの回路で、sinやlogのような関数はどう計算するのか。
7. むずかしい 計算は、どうやって するの?
7. 掛け算なしで関数を出す ── HP-35の工夫
7. HP-35とCORDIC系の方法 ── 乗算器なしで三角関数・対数を求める
1972ねん、ヒューレット・パッカードの「HP-35」が 出ました。世界で はじめての ポケットに 入る、むずかしい 計算が できる でんたくです。
さんかくの 角度や 数の 大きさに かかわる、むずかしい 計算を します。ふしぎな ことに、中の 回路は 「たす」と 「けたを ずらす」ことが 中心で、かけざんの ための 部品が なくても 大じょうぶだったと いわれます[8]。
決まった 数を、あらかじめ 記おくに 入れて おきます。それを たしたり ひいたり しながら、答えに 近づいて いきます。答えは 0.5秒ほどで 出ました。
たしざんの 回路を くふうして 使い回す、という ところは 14-Aの ころと かわりません。
足し算とずらしだけで関数を求める
1972年、ヒューレット・パッカード社のHP-35は、世界初のポケット関数電卓として発売されました。三角関数(sinなど)や対数(logなど)を、CORDIC系の方法で計算します。この方法は、加算器とシフタ(桁をずらす回路)を中心に作れ、掛け算のための乗算器を必要としません[8]。
CORDICは、乗算を使わずに足し算・引き算と桁ずらしで三角関数などを求める方法とされ、1950年代の後半に考え出されたといわれます。
決まった数をROMに持つ
対数の計算では、ln10やln2、ln1.1、ln1.01といった決まった値を、ROM(書きかえない記憶)に持ちます[8]。これらの値を足したり引いたりしながら答えに近づけ、結果は約500ミリ秒、つまり0.5秒で出たとされます。
電卓は、足し算の回路を工夫して使い回す道具として、リレーの14-Aから関数電卓まで続いていました。
HP-35(ヒューレット・パッカード、1972年)は、世界初のポケット関数電卓である。三角関数や対数などを、CORDIC(コーディック)系の方法で計算し、回路は加算器とシフタ(桁ずらしの回路)が中心で、乗算器を必要としない[8]。
CORDICは、乗算を使わず加算・減算・桁ずらしだけで三角関数などを求める方法とされ、1950年代後半に考案されたといわれる。1971年にヒューレット・パッカードの技術者が、指数・対数なども扱えるよう一般化したとされる。
HP-35は対数用の定数(ln10、ln2、ln1.1=ln(1+10⁻¹)、ln1.01など)をROMに持ち[8]、結果は約500ミリ秒で出たとされる。
14-Aの時代から、少ない部品と少ない種類の演算で、できるだけ多くのことをする、という考え方は変わっていない。ここまで読むと、電卓の「計算」は、足し算の回路をどう使い回すかの工夫の連続として見える。
8. かみの 上で、ひきざんを たしざんに かえて みよう
8. 紙の上で、引き算を足し算に変えてみる
8. 補数で確かめる ── 手計算と資料案内
紙と えんぴつを 用意します。2けたの ひきざんを、たしざんに かえて みましょう。
たとえば 75 − 28です。まず、28に なにを たすと 100に なるかを 考えます。72です。
つぎに 75に 72を たします。147に なります。いちばん 左の 1を すてると、47。75 − 28の 答えと 同じです。
ほかの 数でも ためして みましょう。でんたくで 答えあわせを すると、いつも 同じに なります。
紙とえんぴつだけで確かめられます。2桁の引き算を1つ選び、引く数に何を足せば100になるかを考えます。
たとえば75−28なら、28に72を足すと100です。そこで、75に72を足すと147。先頭の1を捨てて47になり、75−28の答えと同じになります。
別の数でも試し、電卓の答えと一致するか見てみてください。例外が見つかったら、それがなぜか考えるのも手です。答えが負になる引き算では、先頭の1を捨てるだけで同じ答えになるでしょうか。
手計算で確かめられる。2桁の減算を1つ選び、減数の10の補数(足して100になる数)を求める。たとえば75−28なら補数は72で、75+72=147。最上位の1を捨てると47になり、減算の結果と一致する。28−75のように答えが負になる場合、同じ手順の結果と通常の答えがどう違うかも確かめられる。
資料を読むなら、電卓の小型化の年表はシャープの電卓の歴史のページ[3]、4004の誕生は嶋正利氏の資料[2]、14-Aの部品の数はEE Times Japanの記事[1]が手がかりになる。足し算の回路は奈良女子大学附属中等教育学校の研究発表[5]が分かりやすい。
関数電卓があれば、sinやlogの答えを出してみて、足し算と引き算の説明とどうつながるのかを考えてみてもよい。電卓の「足し算の回路を使い回す」工夫は、今のコンピュータの中にもどう残っているのか。そこが次の問いである。
しらべた もとの じょうほう
参考にした情報源
参考にした情報源と、その使い方
出典について:企業・大学・学校の資料、技術者の手記、解説記事を使った。何に使ったかは、それぞれの項目の最後に書いている。
- EE Times Japan「電卓の奥深い世界」。https://eetimes.itmedia.co.jp/ee/articles/1503/20/news030_2.html (14-Aのリレー数・計算時間・カシオの創業について。二次資料)
- 嶋正利「マイクロプロセッサ4004の開発」半導体産業人協会会報No.74。https://www.shmj.or.jp/dev_story/pdf/develop43.pdf (最初の電子式計算器、ワイヤードロジック、4004の誕生、10進補正命令について。当事者の記述)
- シャープ「電卓進化の歴史」。https://jp.sharp/products/lcd/tech/dentaku/history.html (CS-10A・QT-8D・EL-805の部品・重さ・価格について。企業の公式資料)
- MONOist「4004から50年」。https://monoist.itmedia.co.jp/mn/articles/2111/17/news050.html (ビジコン141-PFとチップ数について。二次資料)
- 奈良女子大学附属中等教育学校 SSH研究「2進数の加算回路の製作」。https://nwuss.nara-wu.ac.jp/media/sites/11/ssh14_01.pdf (半加算器・全加算器について)
- Wikibooks「高等学校情報」負数と小数のデジタル表現。Wikibooks 高等学校情報(負数と小数のデジタル表現) (補数による引き算の考え方について。二次資料)
- Floating-Point Guide「Basic Issues」。https://floating-point-gui.de/basic/ (0.1が2進で正確に表せないことについて。英語の解説)
- Laporte「The Secret of the Algorithms(HP-35のROMにある対数・三角関数)」。https://archived.hpcalc.org/laporte/TheSecretOfTheAlgorithms.htm (HP-35の計算法・ROMの定数について。英語の解説)
なおした ところ
更新履歴
更新履歴(改版の記録)
- 初版を公開。
このサイトでは、公開した記事の本文は原則として書き直しません。誤りが見つかったときや、内容が古くなったときだけ手を入れ、その理由をこの欄に残します。