• 検索結果がありません。

LabVIEW による手回し計算機参考プログラム

N/A
N/A
Protected

Academic year: 2024

シェア "LabVIEW による手回し計算機参考プログラム"

Copied!
14
0
0

読み込み中.... (全文を見る)

全文

(1)

LabVIEW による手回し計算機参考プログラム

(最終改訂 2019/11/28)

書庫ファイル内容

LV_pinwheel.zipには本稿(拡張子.pdf)、本稿掲載図およびVIブロックダイアグラムキャプチャ画 像(フォルダFigures:拡張子.png)、LabVIEWによる手回し計算機参考プログラムLV_pinwheelの ソースファイル(拡張子.vi)、実行ファイル(拡張子.exe)、設定ファイル(拡張子.ini)のLabVIEW2017 版(情報科学研究教育センター(以下「センター」と表記)での実行にはランタイムエンジン不要)お よびLabVIEW2013版(ランタイムエンジンのダウンロードにNational Instruments社(以下「NI」

と表記)のアカウント登録が不要)がそれぞれフォルダLV2017およびフォルダLV2013に格納されて いる。実行ファイルは同じ場所に設定ファイルを置いて開く(p.14備考参照)。

LV_pinwheel

機械式の手回し計算機は置数レバーの付いた歯車(pinwheel)の回転により連携する数字文字盤の値 をレバーの設定値だけ増減させて加減算を行い(註参照)、これを位取りに応じてずらし桁位置による 増減の重みを変えて乗除算を実現するもので、1960 年代前半まで大学の理系の研究室では標準の装備 品であった。基本形はSwedenのOriginal-Odhner社(以下「Odhner」と表記)が作り、国内ではタ イガー計算器株式会社(以下「タイガー」と表記)が手回し計算機メーカーの代表であった。

回転操作を行う本体右側のクランクハンドル(6時が定位置)は時計回りで加算、反時計回りで減算 となり、結果の表示と回転数の表示がそれぞれ変化し、後者はクラッチ機構により減算回数が商となる 除算では逆に反時計回りで値を増す。桁上げ・繰下がりが加減結果の最上位桁に伝播して正負(2の補 数表現で表した整数の符号と同様に0を正に含める)が反転する際にベルを鳴らす機構を持ち、結果の 表示を監視することなく引放し法(non-restoring division)に相当する除算を行える。

註:一般に公開された最初の電子的情報処理装置とされるENIACは10進10桁(負数は10の補数表 現)の加減算を20クロックで行い、前半はアキュムレータの10進リングカウンタを進め、後半で桁上 げを伝播しており、シミュレータに見る様に正に手回し計算機の歯車の代りにリングカウンタを電子的 に「回している」ことが分る。

シミュレータ http://zuse-z1.zib.de/simulations/eniac/eniac.jar

マニュアル http://zuse-z1.zib.de/simulations/eniac/doc/virtualENIAC.pdf

LV_pinwheel.viは、手回し計算機の機械操作をLabVIEWの制御器への入力で置換えたデモVIで、

基本機能(実機と同様の機能)の仕様は次の通りである。

10桁の置数(Odhner:setting board、タイガー:置数盤)は黄色の置数レバーを表示した2Dピク チャ上のマウスクリックで入力する。置数レバーをクリックしてドラグする必要は無く、クリックした 座標に従って桁と値が設定される。演算中(実機では回転中)置数レバーの表示位置は移動するが、上 の置数表示(Odhner:control register、タイガー:チェックダイヤル)は変化しない。

置数内容は、2 個のOKボタン”ADD”、”SUBTRACT”のクリック(実機でのクランクハンドルの正 逆方向の回転に相当)で13桁のアキュムレータ(Odhner:result register、タイガー:右ダイヤル)

の対応位置に加算または減算され、このとき8桁のカウンタ(Odhner:proof register、タイガー:左 ダイヤル)の対応位置の値が1変化する。

加減算の演算中、置数レバーの位置、アキュムレータとカウンタの値は実機と同様のタイミングで 変化し(クリア操作の場合も同様である。ただし数字は実機のアナログ文字盤の連続的な変化ではなく

(2)

デジタルの離散的な変化をする)置数表示右の 2D ピクチャのクランクハンドルが回転する。演算中 は”busy”が点灯し関連する制御器は無効化される(”busy”右の待時間設定制御器は無効化されない)。

位取りの桁を水平数値スライド(ラベル”position”)により1~8(起動時既定は置数とアキュムレー タの最下位桁が揃う1)の範囲で設定する。

補数モード指定ボタンSW(ラベル”mode”、表示”complement”:起動時既定OFF)ONでは減算を 10の補数の加算(註参照)で行い(”SUBTRACT”ボタンの注釈が変更される。最初の9ステップで各 桁に9の補数を加え、カウンタ更新の10ステップ目に最下位桁に1を加える)演算中置数レバーは9 の補数の位置に赤で表示され(クランクハンドルのノブも赤で表示)正回転する。ON時に表示される ボタンSW(ラベル”show”、表示”? show 9’s complement”)を押している間、置数レバーは9の補数 の位置に赤で表示される。

註:加減算を共に時計回りの回転で行うCURTAでクランクを引上げた状態(横から赤い帯が見える)

に相当する。10 の補数表現では符号反転警告音の機構を使えないが、片手で掴める CURTA は芸術品 とも言える手回し計算機の最高傑作である。小型化のためOdhner型と異なり回転時に各桁同時ではな く下位桁から変化する。VRMLビューアで動作する3DモデルシミュレータはBitmanagementの新版 に対応しなくなったが、シミュレータの作者による解説動画と3Dプリンタで実物の3倍のサイズで製 作した部品の組立工程の動画で巧緻な内部機構を見ることができる。

3Dモデル動作 https://www.youtube.com/watch?v=loI1Kwed8Pk 組立工程 https://www.youtube.com/watch?v=zh2Z11miQ0w

置数、アキュムレータ、カウンタはそれぞれボタン表記が”clear setting”、”clear accumulator”、”clear counter”のOKボタンのクリックでクリアされる。

置数が0のとき、”clear accumulator”ボタン右の ”back transfer”ボタン(Odhner:back transfer、

タイガー:連乗レバー)が有効となり、ONで”clear accumulator”をクリックするとアキュムレータの 値が桁位置指定に応じ置数に転送される。転送後”back transfer”ボタンはOFFとなり、置数が0では ない場合は無効化される。

カウンタが0のとき、カウンタ右のSW(ラベル”sign”、キャプション”div”)が有効となり、カウン タの値が増える回転方向を設定できる。

パネル左下の ”beep”ボタン(”complement”がONのときは非表示)がONのとき、アキュムレータ の符号反転でベルの代りにNI ライブラリの「ビープ音」を鳴らす(起動時既定は880Hzで500ms)。 音の生成中はWhileループが次に進まないため置数レバーとクランクハンドルの2Dピクチャの表示は 静止する。このボタンは待時間設定制御器と同様に演算中も無効化されない。

図1に起動時既定のフロントパネル画面(色はOdhner Model 129の写真から取得)を示す。

図1 LV_pinwheel.vi起動時既定のフロントパネル画面

(3)

図2に加算と補数モードONの減算の途中の様子(実機では前面のスリットから出ている置数レバー が回転により中に隠れ反対側から姿を現す)を示す。

図2 起動時既定のレジスタ内容での加算(左)、補数加算(右)の中間状態

パネル左上の ”instruction”ボタンがONのとき置数レバーの2Dピクチャ左に拡張仕様で使用する次 の制御器、表示器を表示し、操作を命令の列として記述実行できる。基本機能で用いる制御器の操作は 命令の処理中("decoding”点灯時)以外は有効である。

命令文字列選択のメニューリング:ユーザ入力(起動時既定はプリセット1の内容)と3種のプリセ ット文字列を選択する。ユーザ入力の文字列はプリセットを選択したとき失われるので、必要な場合は コピー・ペーストボタン(後述)で退避・復元する。

命令入力文字列制御器:プリセット選択時は無効化されテキスト背景色が緑に変る。

命令実行開始ボタン(表示は ”▷ execute”):クリックで実行開始し、実行中は無効化される。

実行表示ボタン(表示器に変更したOKボタンを使用している。表示は ”decoding”):実行中明るい 黄色に点灯し、ボタン右の文字列表示器に解読中の命令を表示する。

置数桁表示ボタン(表示は “? show place”):押している間、置数桁表示のテキスト背景色が藤色 に変り、配列要素が10~1から命令で桁指定に使用するA~Jに変る。

コピーボタン(表示は ”copy”):クリックで文字列制御器の内容をクリップボードにコピーする。

ペーストボタン(表示は ”paste”):クリックでクリップボードのテキストを文字列制御器にペース トする(プリセット選択時・命令実行時は無効化)。

命令集合概要表示文字列表示器:以下の命令フォーマットの概要を表示する。

命令は英字1文字(大文字小文字を区別せず小文字で入力した場合も”decoding”では大文字に変換し て表示する)またはこれに数字1文字のパラメータが続き、内容は以下の通りである。指定範囲外のパ ラメータを範囲内に強制し、パラメータを持たない命令で指定した場合に無視する以外のチェックをし ていない(例:P0⇒P1、M3⇒M1、L4⇒L、comment⇒C9O1M1M1E9N9T0)。注釈として記述する”%”

以降の文字列は無視される。

置数指定:英字A~J(Aが最上位、Jが最下位)と値(0~9)。

桁位置指定:英字Pと値(1~8)、または英字L(左シフト)もしくはR(右シフト)。桁位置1での L、桁位置8でのRは無視される。

補数モード指定:英字Mと値(通常0、補数1)。

演算指定:英字Oと値(加算0、減算1)。

繰返し加算指定:英字Xと値(1~9は回数、0は終止条件成立まで)。

繰返し減算指定:英字Yと値(1~9は回数、0は終止条件成立まで)。

クリア:英字Kと値 (置数0、アキュムレータ1、カウンタ2、転送3)。置数が0でない状態の転 送指定ではアキュムレータをクリアするのみ。

(4)

カウンタ符号指定:英字Sと値(加算時インクリメント0、減算時インクリメント1)。

Whileループ待時間指定:英字Wと値(1を加えた値を40msに乗じた値が設定される)。

NOP(pause):英字Nと値(Whileループ待時間の倍数だけ停止し、値0はNOPとなる)。

ビープ音発生指定:英字Zと値(抑止0、発生1)。

ビープ音継続時間指定:英字Tと値(1を加えた値を50msに乗じた値が設定される)。

繰返し加減算終止条件指定:英字Qと値(符号反転時終止0、アキュムレータ対応桁が0で終止1)。

命令X0、Y0での加減算の実行回数は、終止条件にQ0を指定した場合には1回以上、Q1を指定した

場合は0回以上となる。”instruction”をOFFに戻したときQ1の指定はQ0にリセットされる。

図3に起動時既定の状態で ”instruction”をONにして ”?show place”を押した状態のフロントパネ ルの画面を示す。

図3 起動後 ”instruction”をONにして ”?show place”を押した状態のフロントパネル

命令文字列選択メニューでプリセットEx. 1を選択して ”▷ execute” をクリックした実行終了時のフ ロントパネル画面を図4に示す。

図4 プリセット命令文字列Ex. 1(被乗数456、乗数123の乗算)の実行結果

(5)

p.4図4のEx. 1は、Odhnerのマニュアルで例題に挙げられている被乗数456、乗数123の乗算で ある。欧米では日本とは逆に数式で乗算記号の左側の項が multiplier であり、この例はマニュアルで

123×456と書かれている。手回し計算機による乗算では、被乗数を置数レバーで設定して乗数を下位

桁から右シフトしながら各桁の値だけ正回転で加算する。上位桁から掛ければ例えば乗数197では百の 位で正回転2回、一の位で逆回転3回の計5回転で求められるが、乗数の他の桁の情報を使用しながら 操作するため機械的な作業とはならない。また、下位桁から掛ければ桁上げが伝播する長さは一定(被 乗数の長さ)であるのに対し、上位桁から掛ければ次第に長くなることからコンピュータの乗算器と同 様に下位桁から掛ける。

プリセットEx. 2は被除数2147483647(231 -1)の除数65535(216 -1)による除算の例で商、剰余 はそれぞれ215、215 -1となる。図5は実行終了時のフロントパネル画面である。

図5 プリセット命令文字列Ex. 2(被除数2147483647、除数65535の除算)の実行結果

手回し計算機による除算は置数した被除数を加算してアキュムレータに設定後、置数をクリアして除 数を置数し、カウンタを負表示(減算の回数が正となる)にして行う。乗算の場合とは異なり、演算に 必要な情報は何れも演算開始前に計算機に格納されており(コンピュータの除算器と同様)商の各桁の 値はベルの音に従って左シフトしながら減算加算を交互に行えばよい。この例では商が奇数桁のため最 後はシフト無しで1回加算してアキュムレータに剰余(0以上除数未満)を表示する。

図6 プリセット命令文字列Ex. 3(被乗数456、乗数123の乗算の別解)の実行結果

(6)

逆演算の関係にある乗算と除算の操作はコンピュータのアキュムレータの使用法に見る様に本来対 称な筈であるが、手回し計算機では乗数が演算開始時には格納されていないため異なった形となる。

コンピュータの乗算器ではアキュムレータの下位に乗数を格納した状態から右シフトしながら(使用 した乗数の内容は下位ビットから順に失われる)LSBが1ならばアキュムレータ上位に被乗数を加える。

手回し計算機では同じことはできないが、アキュムレータの下位に乗数の10の補数を格納し、置数の 上位に被乗数、下位に1を設定して右シフトしながら置数最下位桁に対応するアキュムレータの値を監 視してこれが0になるまで加算すればよい。終止条件Q1を用いてこれを記述した例をp.5図6に示す。

LV_pinwheel仕様変更【2019/05/13追加】

手回し計算機は、算盤、計算尺と並んで計算過程、有効数字、丸めの意味を実感できる有益な道具で あった。Odhner、タイガー共に上位機種では置数、カウンタ、結果の桁数が10-11-20(1970発売のタ イガー最終モデルでは結果21桁)あり、指数の情報は無いが10進20桁精度はDBLの仮数53bはも とよりU64の符号無し64bをも上回る。結果が目に見える手回し計算機では(註参照)置数とカウン タの桁数が不足する場合も分割して計算すれば結果の桁数までの処理が可能である。東京農工大学科学 博物館には歴史的な計算機の本体、部品、マニュアル類が所蔵されているが、廃棄寸前の貴重な数々を 救出・収集した西村恕彦名誉教授は在職中全国から廃品の手回し計算機を集めジャンク品も修理して教 室の人数分を確保し情報処理教育に活用していた。

註:初期の国産電卓には正確に10進四捨五入の丸めを行う機種は無く、切捨てかBCD最上位ビットを 見る七捨八入で、関数電卓が普及する1970年代後半も殆どの機種が冪乗キーで2147483656と表示し た231を正しい値で求められたのはHewlett-Packard(以下「HP」と表記)とomronだけであった。

連乗以外の連続演算の操作は目視またはノートへの記録結果を元に置数レバーを設定していた実機 に対し除算を含む連続演算の実現と中間状態の確認のため、LV_pinwheelの仕様を以下の様に変更した。

① 拡張転送命令、停止命令の追加:

アキュムレータ符号反転転送:英字Uと値(1~8)。アキュムレータの10の補数(正確には1013の 補数)を値で指定した桁を最下位として置数する。パネル表示変化の模倣対象が実機に無いため、パネ ル表示はクリア命令の9ステップではなく直ちに更新され(Figuresフォルダ中のx_transfer_BDF.png、

x_transfer_BDT.png参照)、置数がクリアされている必要はなく転送元の内容もクリアされない。

カウンタ転送:英字Vと値(1~8)。カウンタの内容を値で指定した桁を最下位として置数する。

停止:記号$。マゼンタに点灯した"execute”ボタンのクリックで再開するまで停止状態。停止中は命 令文字列の制御器は無効化され、加減算、クリア、桁位置設定等の操作もできないが置数は可能である。

保存時既定の命令文字列をメニューEx. 1の文字列からp.7図7の実行例のもの(LV_pinwheel.zip 同梱のex0.txt)に変更しp.4図3は差替えている。

② 逆ポーランド記法(p. 5 に記述の通り、欧米と日本では数式で乗数の項が異なるため数式を採用し ていない)で記述した演算の命令文字列への変換【関連制御器、表示器は起動時フロントパネルを左に スクロールすると現れる】:

文字列制御器(ラベル”arithmetic”)に入力した演算内容をボタン(ラベル”tr”、表示 ”translate and copy”)のクリックで命令文字列に変換しクリップボードのテキストにコピーする。保存時既定の演算 文字列はNIの乱数VIの周期6953607871644(「LabVIEWによる乱数参考プログラム」参照)の計算。

結果がアキュムレータからあふれる場合は無視するが(コンピュータの乗算器と同様:利用法はp. 8 図9参照)乗数、商がカウンタの幅8桁を超える場合はメッセージを表示し、コピーしない。

演算は英字(大文字小文字を区別しない)C(clear)、E(enter)、数値(符号無し)、演算記号(+-*/) で記述し、改行、空白、#以降を無視する(Figuresフォルダ中のRPN_BD_xxx.png参照)。オペラン ドの分離・コピーに使用する”E”はHPのスタック操作には対応していない(例えば c2e2*e*e*e*e*

(7)

の結果はHP電卓と同じ4294967296となるが、本VI仕様外の表現で結果が32となる c2e2****は HP電卓ではモデルにより0または引数不足のエラーとなる)。

演算記号(+-*/)の代りに英字(ASMD)を用いた場合は、当該演算終了時に停止命令”$”を付加する。

図7 保存時既定の命令文字列の実行例(停止命令を含む除算の分割)

1年の平均日数はユリウス暦で365.25日(IAUでは定義定数である真空中の光速にこれを乗じた長 さを光年の定義としている)、グレゴリオ暦で365.2425日である。かつて秒の定義(註参照)に用いら れていた1太陽年の秒数を86400で割った値(315569259747=36×7×61839949864=25×33であ り10進では有限小数となる)は10進14桁になりカウンタが8桁の本VIで1回の除算で求めること はできない。図7は、商を3652421の7桁求めて停止し(図左)剰余を7桁ずらして新たな被除数と して続く商の7桁9878125を求めた(図右)例である。

註:現在、国内では単位の定義は計量法第三条に基づき計量単位令の別表第一に定められているが、1992 年の計量法全部改正前は計量法第三条に直接記述され、1958 年改正当時の第三条第三号には「時間の 計量単位は、秒とする。秒は、明治三十二年十二月三十一日午後九時における地球の公転の平均角速度 に基いて算定した一太陽年の三一、五五六、九二五・九七四七分の一として東京天文台が現示する。」

と定められていた。

図8 保存時既定の逆ポーランド記法表現を変換した命令文字列の実行例

図8は保存時既定の連続する乗除算を変換、貼り付け、実行してアキュムレータに6953607871644 を表示した例である。

(8)

2018年11月の国際度量衡総会(CGPM)で4個の基礎物理定数Planck定数h、電気素量(素電荷)

e、Boltzmann定数k、Avogadro定数NAを定義定数(もはやNA mol個の12C原子の質量は0.012kg ではなく、磁気定数(真空透磁率)も4π×10-7 H/mではないそれぞれ実験で得られる量となる)と決 定し、2019 年5月20日から施行された(SI単位の定義で唯一残っていた人工物である「国際キログ ラム原器」は130年の役割を終えた)。

https://www.bipm.org/utils/en/pdf/CGPM/Draft-Resolution-A-EN.pdf

https://www.bipm.org/utils/en/pdf/si-revised-brochure/Draft-Concise-summary-2019.pdf

新しい定義では、10進値でkは7桁、NAは9桁とそれぞれカウンタ、置数の桁数に収まり、その積 でこれも定義定数となる気体定数Rの値8.31446261815324 J・K-1・mol-1は乗算を2度行うことでア キュムレータ13桁の本VIで確認できる。図9はLV_pinwheel.zip同梱のgas_constant.txtを文字列 制御器 ”arithmetic”に貼り付け、変換、貼り付け、実行した例で、被乗数を結果があふれない範囲に限 定して概数を求めて停止(演算はc602214e1380649m:図左)し、再開後に被乗数全桁を指定して下 位桁を正確に求めている(演算はc602214076e1380649*:図右)。

図9 概算とあふれ容認の2度の乗算で気体定数の定義値を10進15桁求める例

LV_arithmetic【2019/05/26追加】

筆算で乗除を行う場合、被乗数と乗数1桁、除数と商1桁の積(部分積)が2次元的に広がるが、コ ンピュータのアキュムレータはシフトにより乗算では積の長さ、除算では被除数の長さ(これに負数の 表現により異なる追加ビットが加わる)で済ませている。アキュムレータの使用法から乗算と除算の過 程が対称であること、積と被除数を2語長とすることでソフトウェアによる多倍長演算の実装を容易に していることが分る。

LV_arithmeticは、真空管、トランジスタの第1、第2世代コンピュータの中で最も成功したIBM70 シリーズ(註参照)の整数乗除算器を(語長36b符号絶対値を語長32b符号無しに変更して)模したデ モ VI である。乗算器と除算器をフロントパネルの上下に配置し(以下では操作対象とした一方を原演 算器とするとき他方を逆演算器と言う)、アキュムレータ、オペランドの転送機能による連続演算、逆 演算器による検算機能を盛り込んでいる。起動時のフロントパネル画面をp.9図10、起動時既定の値で 乗算、除算を実行した結果をp.10図11に示す。仕様は次の通りである。

註:1954/5/7 発表の 704 は浮動小数点演算装置を組込んだ最初の商用機で、70 シリーズの各モデル は”Computer”ではなく”Data Processing System”を標榜した。スプートニクショックで旧ソ連の先制核 攻撃を恐れた米国政府は早期警戒網の整備のためコンピュータの高性能化を急ぎ、IBM に 709 をトラ ンジスタ化させた7090はNASA、LASL(現LANL)、MIT等で活躍した。

(9)

図10 LV_arithmetic起動時のフロントパネル画面

フロントパネル最上段の2個の文字列制御器(ラベルX、Y)にU32の値2個を定数として設定(テ キスト背景色は白)または右の2個の”STO”ボタンのクリックで乗算器もしくは除算器のU64アキュム レータを上位下位の対で退避(テキスト背景色は退避元により黄またはシアン)して、後述のメニュー リングの項目に表示する。入力した数式文字列(VI保存時の既定は X、Yそれぞれ10^72^32-1) はDBLで区間[0, 232 )に還元後、U32に変換される(53b精度の限界のため数式文字列の評価値の絶対 値が253を超えるときはたとえば奇数3^345^23 の還元値が偶数となるなど正確な値にはならない。

無限大、非数は232-1となる。)。

オペランド(乗算器では被乗数(U32)、乗数(U32)、除算器では被除数(U64)、除数(U32))を ビット列で押しボタンクラスタ(LSBを0とするビット位置をブールテキストで表示するため配列では なくクラスタを使用している。Figuresフォルダ中のinit_classic_BD.png参照)または符号無し10進 数で数値制御器に入力する。一方への設定は次のループで他方に反映され、停止時に共に変更して両者 を矛盾する値とした場合、実行開始時に発振する。VI保存時既定のオペランドは乗算器では104729511(「LabVIEWによる乱数参考プログラム」既定の乱数種と乗数の一例)、除算器では23237(素数 逆数の2進小数部をビット31の左に小数点を仮定して求める例。循環節長、循環開始位置については

「LabVIEWによる基数変換参考プログラム」参照)である。

乗数と被除数はそれぞれの押しボタンクラスタ下の ”⇩ SET” ボタンのクリックで四角ライト配列

(註参照)のアキュムレータ(U64)に転送され(乗算器のアキュムレータ上位32b には0が入る)、 連続実行ボタン(表示 ” ▷▷ auto”)、ステップ実行ボタン(表示 ”▷ step”)、次のステップでの操作内 容を示す文字列表示器が表示される(保存時既定はこの状態:図10参照)。アキュムレータの下にはビ ット位置を表示する文字列配列が付随する。

註:備考記載の通りLabVIEWのOSフォントの違いによるレイアウトの乱れは大きな問題である。設 定ファイルでフォントを指定しオブジェクトの表示位置をプロパティノードで指定した場合であって もオブジェクトによっては競合により起動時に表示が安定するまでに数ループを要する見苦しい表示 となる。ここでは競合を生じないオブジェクトの組合せを使用している。

除算器で被除数の上位 32b が除数以上で商が 32b に収まらない場合は、アキュムレータ転送時 に ”division overflow”(背景色は明るい赤)を表示し、2個の実行ボタンは表示されない。

アキュムレータ上位部分の下に配置した被乗数と除数(IBM70ではstorage registerに置かれる)

の値は、乗算器ではアキュムレータLSB(下向き三角形の装飾)が1のときアキュムレータ上位に加算 され(あふれる場合はOFビットが1となる)、除算器では除数がOFビットを含むアキュムレータ上 位以下のとき減算しアキュムレータLSB(上向き三角形の装飾)を1とする。

(10)

実行ボタンの一方をクリックすると他方は非表示となる。全実行過程は64ステップで、乗算器では 奇数ステップが加算またはスキップ、偶数ステップが右シフト、除算器では奇数ステップが左シフト、

偶数ステップが減算またはスキップとなり、加減算とシフトの順序、シフトの向きが乗算器と除算器と で逆になる。ステップ実行を中断する場合は ”⇩ SET” ボタンをクリックして再転送する。

アキュムレータ下位部分(1語長レジスタを連結したIBM70のmultiplier-quotient registerに相当)

上のLED配列には偶数ステップ実行後に進捗状況(乗算器では積のLSB、除算器では商のMSBの位 置)が白で点灯表示される(実行終了時の点灯箇所は図11参照)。

図11 起動時既定の値で乗算、除算を実行した結果

原演算器の実行過程が終了すると実行ボタンと文字列表示器は非表示となり、アキュムレータの上に 結果(乗算器では積(U64)、除算器では商(U32)と剰余(U32))の値が数値表示器に示される。被 乗数、または除数の押しボタンクラスタの右には転送設定クラスタ(キャプション ”source”)と検算ボ タン(表示は逆演算器に向いた矢印付の ”prove”)が表示される(図11)。

転送設定クラスタの要素は、アキュムレータ上位下位、被乗数または除数への転送内容を指定する3 個のメニューリング、転送ボタン(クリックでメニューリング指定の項目を原演算器に転送:表示 ” ↷ transfer”)、即時実行SW(表示 ”▷▷”:VI保存時既定ON)である。メニューリングの項目は、クリア、

定数 X、Y、原演算器のアキュムレータ・オペランドで、逆演算器の実行過程が終了している場合はこ

れに逆演算器の内容が加わる(図11フロントパネル欄外、Figuresフォルダ中のLV_arithmetic_BD.png 右端縦長のケースストラクチャ、menu_gene_BD.png参照)。

即時実行SWがOFFのとき、転送ボタンのクリックで”⇩ SET” ボタンのクリック後の状態と同様に 連続実行ボタン、ステップ実行ボタン、文字列表示器を表示する。ONのときは、転送ボタンクリック の2ループ後(データの反映が安定)に連続実行を開始する(OFFでの転送時に”division overflow”を 表示する場合も強制的に実行し商は232-1を示す)。

検算ボタンのクリックで原演算器のアキュムレータとオペランドの一方(乗算では被乗数、除算では 除数)を逆演算器のアキュムレータ(全体が被除数、下位部分が乗数にもコピーされる)とオペランド の一方に(実行過程の途中であっても強制的に)転送し、2ループ後に連続実行を開始する。除算の検 算では、通常の乗算で開始時に0が入る乗算器のアキュムレータ上位に積の初期値として除算の剰余が 入り、正しい逆演算となる。積が0であっても被乗数が0ではない乗算の検算は正しいが、連続実行開 始前が”division overflow”の状態である被乗数が0の乗算の検算の商は232-1となる。

除算器の既定のオペランドと転送設定はビット31の左に小数点を仮定して1/37(実際は232/37を求 めている)の小数部(2進循環節長は36)を32bずつ順に求めるものである。同様にビット31の左に 小数点を仮定することで、やや煩雑ではあるが次の様にしてp.7図7の例と同じ10進14桁の商を求め ることができる。① 除算器に被除数315569259747、除数86400を設定して”SET”、”auto”をクリッ

(11)

クして実行する【商3652421、剰余85347を得る】、② 乗算器の転送設定でアキュムレータ上位:”clear”、

アキュムレータ下位:”D : Acc [63..32]”、被乗数:”X : 10000000”で”transfer”をクリックして実行する

【積853470000000を得る】、③ 除算器の転送設定でアキュムレータ上位:”M : Acc [63..32]”、アキ ュムレータ下位:”M : Acc [31..0]”、除数:”divisor”で”transfer”をクリックして実行する【商9878125、 剰余0を得る】。

LV_counter【2019/11/20追加】

桁数が固定(註参照)されたカウンタで最大値(10進4桁のカウンタであれば9999)からカウント を更に進めると(10000は表示できないのであふれ)00000)に戻る。これを基準に逆カウントすれ ば(1だけ小さい表現の9999-1を意味すると考えるのは自然で)補数による負数の表現を実感でき る。回転式のカウンタ(例えばこの数年で絶滅も予想されるアナログ誘導形電力量計の整数部)では 99990000の過程はデジタルカウンタと同様に全桁が同時に90の変化をし、99990000の両方 向(逆回転防止装置のある電力量計は逆転しないが)の変化の様子は時間反転の関係になる。

同様の回転文字盤が機械動作をしていても、歯車の勘合により各桁を独立に操作できる手回し計算機 のアキュムレータでは、加減算共に桁上げ・繰下りが下位桁から伝播するため減算は加算の時間反転で はない。手回し計算機の回転方向を回転の途中で変更することはできず、方向の選択はクランクハンド ルが定位置にある場合のみ可能である。

手回し計算機で99991を加えるとき下位4桁は99999990990090000000(次が10000

と順次変化し、また0から 1を引くと00000009009909999999(この後、更に繰下りが上 位に伝播する)と変化する。99990000の変化の過程では、正逆方向で対応する値は9の補数の関係 となり桁上げ・繰下りが伝播するクランクハンドルの回転量も対応する(p.12図13)が、置数1が最 下位桁に加算または減算され最下位桁が変化するタイミングは異なる(p.12図14)。加算では置数レバ ーの値に関らずアキュムレータの当該桁の変化が同じタイミングで始まるのに対し、減算では小さな置 数値での開始が遅くなることによる。【2019/05/26版LV_pinwheelでは、回転中の表示で①減算でのア キュムレータの変化開始を加算と同様とし、②伝播のタイミングでアキュムレータ位置”position”の値 を考慮していなかった不具合があり、2019/11/20版で修正している。】

註:今から20年前、西暦の年表記を2桁で行うシステムで2000年を迎えるとファイルの新旧判断を誤 り更新ができなくなる等の深刻な事態(「2000 年問題」)が予想された。この問題への対処では、多く の現場で年のデータ表現を2桁から4桁にするのではなく、00~49を2000年~2049年、50~99を 1950年~1999年とする2000年を基準とする補数表現に改め問題を50年先送りする対症療法を取った。

因みに、本学の情報システムは新宿校地再開発の時期に並行して業務データを全て洗い直す抜本的な再 構築を行い、年表記も4桁にしてあった。

LV_counter.vi は、回転文字盤のそれぞれの回転の様子を離散動作のデジタルカウンタの表示と比較

するデモVIで、起動時のフロントパネルを図12に示す。仕様は次の通りである。

図12 LV_counter.viのフロントパネル:起動時既定(左)、小数部のクランクハンドル表示(右)

(12)

10進4桁の回転式カウンタ(アナログ電力量計風)、回転式アキュムレータ(手回し計算機風)、デ ジタルカウンタ(ステップ動作で整数部を離散表示)を縦に比較表示する。

回転式カウンタでは整数部の右に小数第1位を白地に黒字の回転文字盤で表示する。

回転式アキュムレータでは±1の加減算(最下位桁に置数1)の過程を表示する。アキュムレータの 長さが4桁のため13桁のLV_pinwheel.viに比べ桁上げ・繰下りが伝播するフェーズは短いが、桁上げ・

繰下り伝播前のアキュムレータ変化フェーズは置数2~9も使用されるLV_pinwheel.viと同じである。

カウンタ内部値の小数部表示の手段を水平スライドSW(キャプション”tank / crank”:起動時OFF)

で切替える。OFFではタンク、ONではクランクハンドルの2Dピクチャ(タンク塗り潰し部分または クランクハンドルのノブの色は正方向:マゼンタ、逆方向:シアン)を表示する。

クランクハンドルの 2D ピクチャの上の数値表示器(キャプション”revolution”)には定位置からの 変位を[0, 1)で表示し、小数部が0でないとき逆転では小数部の1の補数となる。アキュムレータの桁 数が異なるためLV_pinwheel.viの±1の加減算での回転量とは一致しない。

トグル動作の押しボタンSW ”PAUSE”(起動時ON)がONで一時停止する。

数値制御器(ラベル“value”:起動時既定9999.94)に入力した値は、押しボタンSW “SET”のクリッ クでカウンタ内部値に設定される。“SET”ボタンは一時停止時のみ有効で、”PAUSE”ボタンが OFF の 状態ではグレーアウトされる。

押しボタンSW ”INT”のクリックでカウンタ内部値は方向に応じた整数値(正方向:切上げ、逆方向:

切下げ)に丸められる。

方向指定の垂直スライドSW(ラベル“direction”:正方向:マゼンタ、逆方向:シアン)は、一時停 止時に”INT”をクリックして小数部が0(クランクハンドルが定位置に相当)の状態でのみ有効である。

垂直数値スライド(キャプション“wait time (ms)”:起動時既定10)でWhileループの待時間(範囲 は1ms~100ms)を設定する。正味の実行時間は0ではなく、待時間1msで待時間10msの10倍速く はならない。スケールは対数マッピングで上の値が小さい(見掛けの変化が速い)。

図13は待時間を長くして99990000の変化で十の位が変化し終った瞬間をキャプチャした画面で 正逆両方向の回転量が同じ(内部値は9999.837、9999.163と異なり時間反転ではない)であることを 示す。

図13 回転アキュムレータの桁上げと繰下りが伝播する回転量(2桁目で0.837)は正逆方向で等しい

図14は同様に一の位が変化し終った瞬間のキャプチャ画面で、逆方向(減算)では回転量が多い(タ イミングが遅い)ことを示している。

図14 1の加減により回転アキュムレータ最下位桁が変化するタイミングは加算と減算とで異なる

(13)

LV_meter【2019/11/28追加】

前項で回転式カウンタとして例示したアナログ誘導形電力量計は、既に計器製造会社がすべて生産を 終了しており(https://www.jemic.go.jp/kihon/kk13.pdf には2011年製のサンプル写真が掲載されてい るが、データ通信機能を持った電子式の普及により有効期限を迎えた製品を検定して再利用する場面は 限られ)、目にする機会は今後ますます少なくなる。誘導形電力量計は、Arago 円板の回転速度を見れ ば使用電力の大きさが一瞬で分り(留守が分り易く防犯上は不利である)、回転磁界と渦電流に関する 電気磁気学の教材としても有益である。原理・構造は、次の経済産業省の資料p.3図1が分り易い。

https://www.meti.go.jp/shingikai/keiryogyoseishin/kihon/pdf/g60309a08j.pdf

LV_meter.viは、仮想的に消費電力を設定して数字文字盤とArago円板の回転の様子を表示するデモ

VIで図15に起動時のフロントパネル画面を示す。仕様は次の通りである。

図15 LV_meter.viのフロントパネル:起動時既定(左)、円板下面を表示(中)、部品を非表示(右)

数字文字盤は乗数1、全負荷電力10kW未満(通称「一白」モデル)の整数部4桁、小数部白黒反転 1桁で、表示器の高さを揃えるため、小数部も2Dピクチャの要素数1の配列としている。

小数部文字盤には小数第2位に相当する1/10の目盛(註参照)を表示する。

Arago円板の1200回転が1kWhの電力量に相当する(1200rev/kWhモデル)。

円板側面の黒色(赤色のモデルもある)試験票(検定項目の誤差試験ではセンサーにより回転数計測 に使用する)と正面図では円周の百等分目盛を表示する。

円板の上下面(実機では見えない)を縮小して表示し、試験票と2個の潜動防止孔(センサーとレー ザーを用いて試験票と同様に回転数計測にも使用する)の位置により回転の様子を示す。

上下面の表示は垂直スライドSW(ラベル”top”:起動時ON)で切替え、押しボタンSW ”disc only”

(起動時OFF)がOFFのとき、駆動用の鉄心コイル(円板の上が電圧コイル、円板の下に電流コイル)

と制動用の永久磁石の位置を表示する。

押しボタンSW "OFF"(起動時ON)がOFFのとき、垂直数値スライド(ラベルkW)で指定する 仮想的な消費電力(単位kW)が積算される。3.9kWで下面を表示するとSPレコードの回転と同様に なる。【一白1200rev/kWhモデルで3.9kWに対応する計器は実機には無い】

数値制御器(ラベル“value”:起動時既定9999.9)の値は、押しボタンSW “SET”のクリックで電力 量計内部値に設定される。“SET”ボタンは、”OFF”ボタンOFFで電力の積算中はグレーアウトされる。

Whileループの待時間は20msに固定され、内部値は計時VIと仮想電力の値から求める。仮想電力

が大きいとき(内部値の 1 ループでの増分が大きい)、実行環境により円板正面図で目盛表示のエイリ アスの様子は異なるが、回転速度が異なることはない。

内部値が10000以上となったとき、数値表示器(キャプション ”kWh”)には10000で割った余りで

はなく内部値をそのまま表示する。

註:数字文字盤の表示では、LV_counter.viと同様に0~9, 0に対応した11個を高さ方向に連結した画

(14)

素配列から切出して表示しているが、小数部の数字文字盤に目盛を加えたことで 1 文字分の高さを 32 から10の倍数の60に変更している(FiguresフォルダのLV_meter_BD.png参照)。回転により上下 端の近くで形状が歪むが(cos (π/10)≒0.95)、これを無視している。

備考

ランタイムエンジンについて

LabVIEW の実行ファイル(スタンドアロンアプリケーション)を開くには当該バージョンの

LabVIEW本体またはランタイムエンジンが必要である。センターのPCにはLabVIEW2017がインス

トールされており、LV2017フォルダ中の実行ファイルをそのまま開くことができるがLV2013フォル ダ中の実行ファイルは開けない。

個人所有PCでLabVIEW2017版実行ファイルを開くにはバーチャルカフェテリア(本学の学生は特

別な利用申請無しに利用可能)にログインするかまたは以下のページでNIユーザアカウントを登録し てダウンロードしたLabVIEW2017ランタイムエンジンをインストールする。

ダウンロードページ:http://www.ni.com/download/labview-run-time-engine-2017-sp1/7191/en/

ファイル名:LVRTE2017SP1_f3Patchstd.exe、ファイルサイズ:363.29 MiB

NIユーザアカウントの登録に抵抗のある人は次の場所からLabVIEW2013ランタイムエンジンをダ ウンロード(登録不要)、インストールしてLV2013フォルダ中の実行ファイルを開く。

http://ftp.ni.com/support/softlib/labview/labview_runtime/2013/Windows/LVRTE2013std.exe ファイル名:LVRTE2013std.exe、ファイルサイズ:257 MiB

実行時ライブラリとフォント指定について

数式文字列を使用するLV_arithmetic の実行ファイルを開くには実行時ライブラリlvanlys.dll が必 要なため、dataフォルダを実行ファイルと同じ場所に置いて開く。

LabVIEW では、フォントを VI の作成時に明示的に指定することもできるが、通常実行ファイルを

作成する場合には(指定フォントがインストールされていない環境では表示できなくなるため)OS 既 定のフォントを使用しており、作成時のフォントと実行時のフォントが異なる場合、文字列が枠に収ま らない、配列が斜めにずれるなどのレイアウトの乱れを生じる。以下の4行が書かれた同梱の設定ファ イル(VIと同じファイル名で拡張子が.ini)を実行ファイルと同じ場所に置いて開くこと。

LV2017版設定ファイル

[VIファイル名(拡張子無し)]

appFont="メイリオ" 17 dialogFont="メイリオ" 17 systemFont="メイリオ" 17

LV2013版設定ファイル

[VIファイル名(拡張子無し)]

appFont="MS UI Gothic" 12 dialogFont="MS UI Gothic" 12 systemFont="MS UI Gothic" 12

参照

関連したドキュメント

温度変化に伴うPAH PAH PAH PAH形成の計算例( 形成の計算例( 形成の計算例( 形成の計算例(LCO LCO LCO) LCO )) )..

そこで本稿では,各ワーカの性能が不均一であることを

- 1 - 第3学年 算数科学習指導案 1 単元名 筆算のしかたを考えよう(たし算とひき算の筆算) 2

(2) 借入金の返済計算 本計算は金融電卓(市販で多いものは、 3,000 円~

そこで本稿では,各ワーカの性能が不均一であることを

年 ;欠(昭和) 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ー ズ 微 分 方 程 式 求 解 最適値求解

ソース(LabVIEW2013)を開いて実行する場合は pixel_color.vi および auditory_illusion.vi について は参照するサブ

極めて簡単且つ容易にする.このことはHoward (1977)のextrinsic faults in