banner

  富山大学 > 理学部・大学院理工学教育部理学領域 > トピックス > 2008年4月
トピックス
 コンピュータの仕組(1) 〜タイガー手廻し計算器〜 (数学科)
タイガー手廻し計算器みなさんはタイガー手廻し計算器 (右写真) をご存知でしょうか。この計算器は、タイガー計算器株式会社(現:株式会社タイガー)の前身である大本鉄鋼所の大本寅治郎らによって1919年(大正8年)に国内計算器として開発が始まり、1923年には「虎印計算器」として商品化されました。その後、「タイガー計算器」と名称を変え、正確かつ大量の計算が必要な建築・財務・研究機関等で使用されましたが、昭和40年代初頭に半導体を使用した電卓が登場すると、その姿を消していきました。詳細については、株式会社タイガーが運営するタイガー手廻計算器資料館をご覧ください。なお、私の所有するタイガー手廻し計算器の製造番号が161530であることから、昭和30年代初頭に製造されたものだということもわかります。
  タイガー手廻し計算器は、歯車で動く機械式の計算器で、右側のハンドルをグルグル廻すことによって計算を行ないます。演算の基本は足し算・引き算・掛け算・割り算の4つの演算ですが、タイガー手廻し計算器は足し算とシフト演算を巧みに使って4つの演算を行ないます。なお、足し算に補数の概念を導入すると、引き算(負の数)を足し算として扱うことができるようになります。コンピュータの演算方法も、コンピュータが2進数を扱い、タイガー手廻し計算器が10進数を扱うという違いはありますが、このような方法が用いられています(CPUに足し算とシフト演算を行なう回路だけ準備すればよく、引き算・掛け算・割り算を行なう回路が必要なくなるため、構造が非常にシンプルになるという利点があります)。それでは、「タイガー手廻し計算器 シミュレータ」を用いて4つの演算を行なってみましょう。


 ■ タイガー手廻し計算器の主要部位の名称



●足し算  足し算は最も基本となる演算です。例として、「1234+5678」を計算してみましょう。あわせてタイガー手廻し計算器の使い方を覚えましょう。
注意:チェックダイアル・右ダイアル・左ダイアルが0になっていない場合は、レバークリアー・右帰零ハンドル・左帰零ハンドルを引っ張り、それぞれ0に戻してください。なお、計算を行なった後にもこの操作を行なってください。
  1. 置数レバーを使って数値「1234」をセットします。
  2. クランク・ハンドルを「+回転」し、右ダイアルに「1234」をセットします。
  3. レバークリアーを使ってチェックダイアルと置数レバーを0に戻します。
  4. 続いて、置数レバーを使って数値「5678」をセットします。
  5. クランク・ハンドルを「+回転」すると、自動的に繰り上がりが起こり、右ダイアルに計算結果である「6912」が表示されます。
    * 足し算では左ダイアルは関係ありません。
右ダイアル + チェックダイアル = 右ダイアル (足し算の計算結果)


●引き算  まず、「5678−1234」を計算してみましょう。

  1. 置数レバーを使って数値「5678」をセットします。
  2. クランク・ハンドルを「+回転」し、右ダイアルに「5678」をセットします。
  3. レバークリアーを使ってチェックダイアルと置数レバーを0に戻します。
  4. 続いて、置数レバーを使って数値「1234」をセットします。
  5. クランク・ハンドルを「−回転」すると、自動的に繰り下がりが起こり、右ダイアルに計算結果である「4444」が表示されます。
    * 引き算でも左ダイアルは関係ありません。
では、「−1234+5678」はどのように計算すればよいのでしょうか。ここで、引き算(負の数)を扱えるように補数を導入しましょう。

■ 補数  基準となる固定された数(通常はnを正の整数としたとき10nを取ります)からある正の数を引き、負の数「−1×ある正の数」を補数(n桁の正の数)として表します(ただし、10nはある正の数より十分大きな数とします)。すなわち、補数は
10n−ある正の数

で与えられ、正の数として表されます。したがって、引き算「X−Y」は

X−Y = X+(−Y) = X+(Yを補数で表した正の数)

と考えれば、足し算に帰着できることがわかります。
  補数には、10進数には10の補数と9の補数があり、2進数には2の補数と1の補数があります(単に補数と言った場合、10進数であれば10の補数を指し、2進数であれば2の補数を指します)。10の補数と9の補数の間には、関係式
10の補数 = 9の補数 + 1 (10の補数 − 1 = 9の補数)

が成り立ちます。例として、基準となる固定された数を107(補数を7桁の正の整数で表すこと)とし、負の数「−1234」の10の補数と9の補数をそれぞれ求めてみましょう(9の補数では基準となる固定された数を(107−1)に取ります)。
10の補数と9の補数
なお、上記より、
10の補数10000000−1234
 10000000−1234+1−1
 (10000000−1)−1234+1
 (9999999−1234)+1
 9の補数+1

と考えれば、10の補数を直接求めるよりは、9の補数を求めてから1を足すと比較的容易に10の補数が求められることもわかります。また、コンピュータが直接扱うことのできる2進数の場合、2の補数を論理演算を用いて求められるという利点を持ちます(論理演算を用いて1の補数を求め、これに1を足して2の補数を求めます)。

上記より、負の数「−1234」は補数(正の数)

10000000000000+(−1234) →  9999999998766(補数)

として表されます。以下、タイガー手廻し計算器による引き算「−1234+5678」の計算方法を挙げておきます。
注意:タイガー手廻し計算器では、右ダイアルの繰り上がりや繰り下がりは、置数レバーの1の位を基準に13桁分しか行ないません(内部構造の制約により20桁全てで繰り上がりや繰り下がりを行なうわけではありません)。したがって、基準となる数は1013となり、引き算(負の数)は13桁で扱うことになります。
  1. 置数レバーを使って数値「1234」をセットします。
  2. 数値「1234」の補数を計算するためにクランク・ハンドルを「−回転」します。
    右ダイアルに13桁で表された補数「9999999998766」が表示されます。
  3. 後は、「5678」を加えればよいので、置数レバーを使って数値「5678」をセットします。
  4. クランク・ハンドルを「+回転」すると、右ダイアルに計算結果である「4444」が表示されます。
右ダイアル − チェックダイアル = 右ダイアル (引き算の計算結果)


* 引き算「1234−5678」を計算すると計算結果はどのようになるのでしょう?


●掛け算  例として、「1234×1234」を計算してみましょう。とその前に、「1234+1234」を計算してみます。すると、左ダイアルが「2」を指していることに気づきます。察しの良い方であればお気づきだと思いますが、「1234」を足した回数をカウントしているのです。すなわち、「1234×1234」を計算するには左ダイアルが「1234」になるまで廻し続ければよいことになります。しかしながら、1234回もクランク・ハンドルを廻すのは時間もかかり大変なので、シフト演算を導入しましょう。

■ シフト演算  私たちは、ある10進数を・・・,1000分の1倍,100分の1倍,10分の1倍,1倍,10倍,100倍,1000倍,・・・する簡単な方法を知っています(2進数では・・・,8分の1倍,4分の1倍,2分の1倍,1倍,2倍,4倍,8倍,・・・となります)。例えば、ある10進数を1000倍するには小数点を右に3桁分移動します(小数点を固定すると数字を左に移動することになります)。実はこのような演算をシフト演算(3回左シフト演算)と呼びます。逆に、ある10進数を100分の1倍する演算を2回右シフト演算と呼びます。なお、下記の例から、私たちが掛け算を行なう際、自然にシフト演算を利用していることに気づきます。
シフト演算の例
したがって、タイガー手廻し計算器で「1234×1234」の掛け算を効率良く計算するには、

1234×12341234×(1×1000+2×100+3×10+4×1)
 1234×(4×1+3×10+2×100+1×1000)

のように理解し、シフト演算を利用して以下の手順で計算を行います。

  1. 置数レバーを使って数値「1234」をセットします。
  2. クランク・ハンドルを4回「+回転」します。右ダイアルと左ダイアルはそれぞれ「4936」と「4」になります。
    0に1234を4回足した数と同じになります。
  3. 桁送りを使ってギャレージを右に1桁分移動します(1回左シフト演算)。
  4. 続いて、クランク・ハンドルを3回「+回転」します。右ダイアルと左ダイアルはそれぞれ「41956」と「34」になります。
    4936に12340を3回足した数と同じになります。
  5. 以下同様に、桁送りを使ってギャレージを右に1桁分移動します(更に1回左シフト演算(トータルで2回左シフト演算))。
  6. クランク・ハンドルを2回「+回転」します。右ダイアルと左ダイアルはそれぞれ「288756」と「234」になります。
    41956に123400を2回足した数と同じになります。
  7. 桁送りを使ってギャレージを右に1桁分移動します(更に1回左シフト演算(トータルで3回左シフト演算))。
  8. クランク・ハンドルを1回「+回転」します。右ダイアルと左ダイアルはそれぞれ「1522756」と「1234」になります。
    288756に1234000を1回足した数と同じになります。
    ここで左ダイアルが「1234」となるため、計算を止め、掛け算の計算結果は右ダイアルの「1522756」となります。
チェックダイアル × 左ダイアル = 右ダイアル (掛け算の計算結果)


●割り算  割り算は、割られる数から割る数を何回引くことができるかという問題になりますが、これは掛け算に帰着することができます。割り算の演算方法については、みなさんへの宿題としますので、この機会にぜひ考えてみてください。
注意:タイガー手廻し計算器で割り算を行なう場合は、クラッチを「÷」にセットしてください。クランク・ハンドルを「−回転」させたとき、左ダイアルが正の方向に廻るようになります。

右ダイアル ÷ チェックダイアル = 左ダイアル (割り算の計算結果)


* その他にも、「タイガー手廻計算器資料館」に様々な計算方法が紹介されています。


●補足 

  • この原稿の作成には株式会社タイガーの運営する「タイガー手廻計算器資料館」を参考にいたしました。
  • タイガー手廻し計算器 シミュレータ」はJava Scriptを使って作成いたしました。実行するにはMicrosoft Internet Explorer 4またはNetscape Navigator 6以上が必要です。なお、1152×864以上の画面サイズでご利用ください。
  • 高校生向けには高大連携事業の一環として上記内容を取り上げた「計算機理論入門」が設けられています。過去に、富山県立富山高等学校のスパーサイエンスハイスクールで上記内容の講義を行ないました。
  • 授業では「情報科学序論」で上記内容を講義する予定です。旧カリキュラムでは「プログラミング演習T」で上記内容を講義いたしました。
  • 記事:幸山 直人
    戻る

    Last modified 2008.04.01
    富山大学理学部広報委員会情報・広報部会作成
    E-mail: kouhou@sci.u-toyama.ac.jp