Hatena::ブログ(Diary)

氏家備忘録/非実用日記群 このページをアンテナに追加 RSSフィード Twitter

2008-03-07

スタック電卓 calcr ver0.17 スタック電卓 calcr ver0.17を含むブックマーク

暴れん坊将軍、浮動小数点orz

変更内容

  • 小数点以下数字の表示を改善。(0.0005などと入力したとき0.000499999と表示されていたことがあった。改善は結構シビアな作業でありました!)なお、下の注意事項の「小数点以下入力中、・・・」の項目にご注意ください。

以下

再掲示。

軽いけどディープな電卓

かなり自分好みと言うか自己満足電卓。

きっかけ

WinodowsMobile用の電卓ソフトはすでにいっぱいあります。

一方、個人的にはhp 12C platinumを愛用していると言うこともあって、どうしてもスタック電卓の操作が体に馴染んでいます。

しかしながら、HP電卓エミュレータは海外にたくさんあるものの、

スタック電卓ってないんですよね。

ないなら作ろう!

できる範囲でorz

ということで、作って見たしだい。

eVC++のHelloWorldスケルトンをいじりました。

というわけで画面は簡素。

超簡素。

10進数モード。実数が扱えます。

http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.17/image10.jpg

16進数モード。整数のみ。*キー(-iIオプションつきのときは#キー)で前面テンキーから直接A-Fが入力できるモードと数字入力モードがトグルします。

http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.17/image16.jpg

メニュー構成。(画面は0.16)

http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.16/imagemenu.jpg

プログラムショートカットへ"-p"オプションで指定してください。例はBMIを計算するプログラムです。RUNで実行。(画面は0.16)

http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.16/imageprogram.jpg

動作確認

プログラムの呼称

calcrの"r"は、RPN電卓のRをもじってます。

「カルクアール」と呼んでください。

インストール

  1. calcr.CABからCABファイルをダウンロード
  2. アドエスで実行してインストール
  3. 普通はこれでおしまい。

使い方

例を使いながら。

12+24=

を計算します。

12

アクションキー(エンター)

34

+(カーソル上)

こんな感じ。

  1. スタックに数字を載せて行きます。
  2. 入力された数字はまずXレジスタにエンターキーで登録され、確定し、YレジスタにPUSHされます。
  3. 次に数字を入力すると、Xレジスタに登録されます。
  4. 次に演算キーを押すと、XレジスタとYレジスタ演算され、演算結果がXレジスタに格納されます。

こんな感じ。

使い方

じゃZレジスタとかTレジスタとか、使わないでいいじゃんと思うかもしれませんが、次の例を。

(12+34)/(56+78)*(89+12)=

この場合は

12

アクションキー

34

+ (12と34をたして)

56

アクションキー

78

+ (56と78をたして)

÷ (12と34をたした結果を56と78をたした結果で割って)・・・A

89

アクションキー

12

+ (89と12をたして)

× (Aの値と89と12をたした結果をかける)

Zレジスタまで使い、結果がXレジスタに残りました。

場合によってはTレジスタまでいくこともあります。

使い方

クリアキーを押すとXレジスタのみ消えます。

全部のレジスタを消したかったら

  1. クリアキーでXレジスタをクリアし
  2. アクションキー連打

アクションキーを押すと、すでに確定されたXレジスタの値がPUSHされていきます。

よって全部のレジスタが0になります。

使い方

逆に計算した結果POPされると、Tレジスタの値がZレジスタにコピーされます。

よって

  1. Xレジスタに定数を入力
  2. アクションキー連打 Tレジスタまでいっぱいにすると。
  3. この定数を煮るもよし、焼くも良し。Tレジスタからどんどんコピーされてきます。

使い方

10進と16進は基数を切り替えることになります。

16進時は基数が16になります。

だからHEXで"X=10"と表示されているとき、10進に表示を切り替えると"X=16"になりますよ。

基数が10進のときは小数点以下表示されますが、基数が16進のときは整数限定です。

基数が16進のとき、前面の小数点キーは[1⇔A]キーとなります。このキーは、1〜6キーがA〜Fを直接入力できるモードとトグルするキーになります。

キー

キー入力参考
数字キー数字16進数モード時に[1⇔A]キーで1〜6キーから直接A〜Fが入力できます。
A〜Fキー数字(0xA〜0xZ)フルキーボードから利用した時に便利。
カーソルキー↑
カーソルキー↓
カーソルキー←×
カーソルキー→÷
アクションキーエンター
エンターキーエンターフルキーボードから
*キー小数点.16進数モードでは前面テンキーのトグル[1⇔A]-iIオプションを付けた場合はX⇔Y (レジスターXとYを交換)
#キーX⇔Y (レジスターXとYを交換)-iIオプションを付けた場合は小数点.16進数モードでは前面テンキーのトグル[1⇔A]
クリアキーレジスターXをクリア[CLx]キーですね
ソフトキー左fメニュー10-16(基数の10進数と16進数トグル)
RUN(プログラム実行)
COPY X(Xレジスタクリップボードへのコピー)
カンマ区切りトグル
フォントサイズ変更(Xレジスタにあらかじめフォントサイズをテキトウに数字で入力しておいて下さい。デフォルトは20です。)
*#キー入れ替え
Y^X

1/X
R↓(スタックロールダウン)
LSTx(計算直前のXレジスタ呼び出し)
CHS
ソフトキー右CustomKEYメニュー"-k"オプションで指定されたプログラムコマンドを即時実行します。
例:"-kM"で[CustomKEY]は[CHS]キーとして利用
.キー小数点フルキーボードから
Gキー[1/X]キーフルキーボードから
Iキー#*キーを入れ替えます。フルキーボードから
Lキー[LSTx]キーフルキーボードから
Mキー[CHS]キーフルキーボードから
Rキー[R↓]キーフルキーボードから
Sキー[X^2]キーフルキーボードから
Tキー[√]キーフルキーボードから
WキーXレジスタクリップボードにコピーフルキーボードから,Ctrl+Cは使えません、Wでコピーしてください。
Xキー[X⇔Y]キーフルキーボードから
Yキー[Y^X]キーフルキーボードから
Zキー10-16 基数の10進数と16進数トグルフルキーボードから
[OK]キーアプリケーション終了最小化じゃないです。

ショートカットオプション

"-i" "-k" "-p"オプション以下に続く文字列は共通です!

"-i" ではcalcr実行開始時に処理されるプログラムを記述します。

"-k" では右ソフトキーを押した時に処理されるプログラムを記述します。

"-p" では "RUN" メニューを選択した時に処理されるプログラムを記述します。

処理される内容は同じです。

ショートカットオプションの例

再度掲示。ver0.16より -f -ckオプション廃止しました。-iオプションを利用してください。

-iはcalcr実行前に処理されるプログラムです。

プログラムコマンド

-p、-i、-kオプションプログラムコマンド(共通)です。

大文字小文字区別します。

00キー入力
11キー入力
22キー入力
33キー入力
44キー入力
55キー入力
66キー入力
77キー入力
88キー入力
99キー入力
..キー入力
aAキー入力
bBキー入力
cCキー入力
dDキー入力
eEキー入力
fFキー入力
EEnterキー入力
++実行
-−実行
*×実行
/÷実行
CXクリア
FXレジスタの値にフォントサイズを変更
G逆数1/X
I#*キー入れ替え
K桁区切り表示のトグル
LLSTx実行
MCHS実行
RR↓実行
SX^2実行
T√実行
WXレジスタクリップボードにコピー
XX⇔Y実行
YY ^ X
Z10進数と16進数の基数切り替え
PPAUSE レジスタと現在のプログラムの状態表示 デバッグに使ってね
Bプログラム途中で終了 Break
上以外の文字プログラム終了 Breakに同じ

例:ショートカットオプション "-p"

こんな感じでショートカットプログラムしてください。RUNで実行です。

http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.16/imageprogram.jpg

  • BMIを計算する インプット Y:身長(cm) X:体重(kg) → アウトプット X:BMI
    -pX100/E*/
  • 緯度経度を実数にする インプット Z度 Y分 X秒 → アウトプット X:緯度経度の実数値
    -pE3600/X60/++EERRR

例:ショートカットオプションに "-iIK15FC" を指定したときの挙動

とーたく様よりの要望にお応えし以前用意した "-ck" "-f" オプションは廃止し、 -i オプションに統合しました。

同様の挙動をするショートカットオプションの記述は "-iIK15FC" となります。(わかりにくいなぁ)

http://www.d2.dion.ne.jp/~ujiie/wzero3/calcr/0.16/imageshokika.jpg

  1. "I"で*キーと#キーを入れ替えます。
  2. "K"で桁区切りをトグル。デフォルトでは3桁区切り表示されますが、Kを指定することで桁区切り表示をなくします。
  3. "15"でXレジスタに15がセットされます。
  4. "F"はXレジスタにセットされた値にフォントサイズを変更します。デフォルトは20ですが、先に15がXレジスタに設定されていますので、フォントサイズは15と小さめになります。
  5. "C"でXレジスタをクリアします。

"-k"について

右ソフトキーはユーザがカスタマイズできるキーです。

"-k"オプションで右ソフトキーに何をさせるか設定できます。

デフォルトでは[R↓]です。

  • "-kM"とした場合、Mは[CHS]ですので、右ソフトキーは[CHS]として働きます。
  • "-k000"とした場合、右ソフトキーは"000"を一度に入力するキーとなります。

というわけで

私にはHP電卓はおもろい存在なのです。

物好きな方は使って見てね。

超絶にわかりやすいマニュアル

YHPのころの日本後マニュアルがあったので確保しておきました。

HP12C日本語マニュアル

非常にわかりやすいです。

スタックの挙動についてマニュアル188ページ(PDFでは190ページ)以降にすばらしい解説がありますので、ぜひお読みください。

スタックの挙動はこれに準拠しています。

ソース

ソース後悔

全ソース

全部後悔

  1. eVC4++
  2. SP4
  3. PocketPC2003SDK

を入れれば見れます。

注意事項

  • 小数点以下入力中、入力した数字と異なる近傍の数字が表示される場合があります。例:8.9012を入力したとき"8.9011"と表示されてしまいます。しかし例えばその後8.90123まで入力すれば表示が"8.90123"となります。浮動小数点の泥沼にはまりチューニングしましたが手いっぱいです。BCD演算ライブラリを利用すればいいんでしょうね・・・というわけで、大勢に影響はないと思いますが、ご了承ください。
  • [f]メニューを閉じる際、左カーソルキーで閉じると、もれなく演算×が行われてしまいます。いろいろ手を尽くしましたが回避方法がわかりませんでした。[f]メニューはソフトキーで閉じてください。申し訳ないです。
  • 小数点以下数字を思い切り入力すると思わぬ誤差が表示されます(以前より頻度は少なくなったけど・・・)。Cのdoubleとprintfの%gの限界です。表示ルーチンを自作すればいいんでしょうけど今のところ予定はないです。すみません。
  • WithATOKで半角数字をOFFにしている場合は数字入力できません。今後対応できるか自信がありません。申し訳ないです。

とーたくとーたく 2008/03/09 22:57 小数点周り、改善を確認しました。
これでまたさらに使いやすくなりました。お疲れ様です。
ところでだいぶ前に知ったのですが、MZ-700ってWin上にエミュレータがあるんですねぇ。

ujipujip 2008/03/10 20:19 小数点まわりはあんまり期待しないでくださいね(こらこら)。
それから、mz-700のほかに、mz-2000のエミュレータもあるんですよ。
以前ちょっといじって見ましたが、やっぱり本物がいいなぁとか思いました。
動体保存されていないかなぁmz-2000。

とーたくとーたく 2008/03/11 01:26 こちらは気長に待たせていただきますよ〜。
MZ-2000もエミュレータがありますか。最近はCPUパワーが余ってますから懐かしいもののエミュレータは結構ありますね。
私はMZ-80Bからこの世界に入りましたが、残念ながら当時は経済力ゼロの子供でしたからナイコン族ってやつでしたねぇ。いまMZをもっててもOSのテープが全部ワカメになってそうです。