WHP32

とても使いやすい「逆ポーランド記法電卓」です

WHP32

概要

WHP32は、とても使いやすい「逆ポーランド記法電卓」です。

画面に10キーのボタンはありますが、キーボードから入力しても使用できます。

このソフトウェアのオリジナル作者に敬意を表し、このソフトウェアもフリーソフトとして提供しています。

オープンソース化も計画していますので、興味のある方は最後の方をご一読下さい

逆ポーランド記法電卓ってなに?

例えば、「1+2」は、次のように入力します。

  1. 1
  2. Enter
  3. 2
  4. +

4段数字が表示されるうちの、一番下の欄(X欄)に答えが出ます。

これは、

「1」「()」「2」「+(を足す)

の順番で入力すると答えがでます(⏎をEnterキーとする)。

もっと複雑な計算の場合はどうでしょう。

たとえば「(3×4)+(6÷2)」は、() に対応した電卓なら普通の電卓でも計算はできますが、そうでない場合は面倒です。


逆ポーランド記法でも何通りかありますが、()は必要ありません。例えば次のように入力します。

  1. 3
  2. Enter
  3. 4
  4. ×
  5. 6
  6. Enter
  7. 2
  8. ÷
  9. +

4段数字が表示されるうちの、一番下の欄(X欄)に答えが出ます。

この式はそもそも、「3と4を掛け、それに6を2で割ったものを足す」という日本語で表現できます。


これを「3」「()」「4」「×(を掛けて)」「6」「()」「2」「÷(で割ったものを)」「+(足す)」の順に入力することで答えが得られます(⏎をEnterキーとする)。


このように、日本語の語順と同じに入力すると計算できるため、日本人にとてもよく向いています。

動作環境

Windowsの32ビット版と64ビット版をご用意しております。

Windows 11で動作確認していますが、Windows 10でも動作すると思います。それより古いもので動くかどうかは分かりません。

CPUがx86ではないWindows RTや、Windows Mobileなどでは動作しません。

古い32ビット版のみ、Windows XPおよびWindows Vistaでも動作しますが、サポート切れのOSですので、ご利用は動作保証外となります。また、最新版では修正されているバグが少し残っています。

開発の経緯

かつて、NAG様がDelphiで作成し、フリーで公開していたWin16用の逆ポーランド記法電卓「WHP」がありました

しかし16ビットアプリケーションです。Windows XPの時代が終わり、Windows 7以降へと移行する必要が平成26年に発生しましたが、どうせXPから7に変えるなら64ビットOSにしたいところ。しかし64ビットWindowsでは16ビットアプリが動作しません。

ですが、このWHPが使用できないと生活にかなり困りますので、64ビットOSへの移行に躊躇せざるを得ない状況もあるかもしれません。

そこで、このソフトウェアを32ビットアプリケーションとして作り直すことにしました。

このソフトウェアは、Delphiで作成されていたオリジナルのWHPとはプログラムは全く異なります(C++で書かれています)が、可能な限り同じ見た目と操作性を再現しつつ、更に改良を加えたものとなっています。

画面は変更されることがあります。

WHPにはあったフォントや画面の色を変える機能は省いています。エラー時の音のON/OFFは、オプション(O)メニューから設定できます。

色の変更機能については要望があれば対応を検討しますが、フォントについては桁数に応じた自動拡縮機能があるため実装が困難です。

計算機能は元のWHP相当ですが、将来的にはWindows標準の電卓にある程度の関数は実装しようかと考えています。

最新版ダウンロード

お知らせ

最新版はWindows 11用に作られています。

Windows 10でも動作すると期待されますが、どのくらいまで古いWindowsで動くのかは不明です。

内部ではWindows Vista以降で新設されたWindows APIなどを用いていますので、それより古いWindows (Windows XPなど)では最新版は動作しません。XPでは旧版をご利用下さい。

無保証

このソフトウェアは、無保証のフリーソフトです。

可能な限り不具合がないようつとめますが、万一このソフトウェアにより重大な計算誤りが生じ、損害が発生した場合でも、一切保証は致しません。

他に必要なプログラムに関する情報

再頒布可能パッケージが不要なように実行ファイルを生成していますので、7zの中にある実行ファイルを適当な場所に置けばすぐ使えるはずです。

プログラムはC++で書かれていますので、.NET Frameworkなども必要としません。

最新バージョン ダウンロード

バージョン0.19 (beta) (R6/08/07)

開発中のβバージョンです。

ウイルス等が混入していないことをMicrosoft DefenderおよびVisusTotalでチェック済みです。

安全性の調査結果

まれにMicrosoft Defenderで「Trojan:Script/Wacatac.B!ml」という警告レベル重大のトロイの木馬として検知され自動削除されることがあるようですが、Microsoft Defenderのバグによる誤検知ですのでご安心下さい。


念のためGoogle社のVisusTotalでチェックしたところ、次の結果がでています。

64ビット版の調査結果

75セキュリティーベンダーのうち1ベンダーが誤認し、それ以外の全て74は問題なし

  • SecureAge: Malicious (= 悪意のあるソフト)

32ビット版の調査結果

75セキュリティーベンダーのうち2ベンダーが誤認し、それ以外の全て73は問題なし

  • SecureAge: Malicious (= 悪意のあるソフト)
  • Bkav Pro: W32.AIDetectMalware (= マルウェア)

誤検知しているところは、いずれも誤検知で有名な信頼性が低いセキュリティーベンダーのようです。

弊社としては、現状公開しているファイルは安全であると判断しています。

参考にして下さい。

旧版ダウンロード

ランタイム(Windows XP対応)

(注意)Visual Studio 2013のランタイムが必要です

あらかじめランタイムをインストールしておいて下さい。

「コンピューターに MSVCP120.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。」と表示され実行できない場合は、ランタイムライブラリーがインストールされていません。

Visual Studio 2013 の Visual C++ 再頒布可能パッケージから、使用するものに応じて、以下をダウンロードしてインストールしてください。

  • 32ビット版 vcredist_x86.exe
  • 64ビット版 vcredist_x64.exe

これをインストールしますと、他のVisual Studio 2013により作成されたプログラムも実行できるようになります。

Windows XP対応バージョン ダウンロード

バージョン0.17 (beta) (H28/08/25)

Windows XPで動作する最終バージョンです。

このバージョンの64ビット版はWindows 11では(おそらく10でも)動作しません。最新版をご利用下さい。

インストール

7zを任意の場所で展開し、含まれている実行ファイルを任意の場所に置いてご利用下さい。

今のところ、インストーラーはありません(強い要望があれば検討します)。

「C:\Program Files」の中に適当にフォルダーを一つ作り、その中に置くのがMicrosoft的には理想のようですが、セキュリティ等で面倒な場合、C:の直下に「C:\Application」などのフォルダーを作り、その中に置くのも良いかと思います。


このソフトウェアはレジストリーは使いません。

設定は、Windows XPの場合は「C:\Documents and Settings\(ユーザー名)\Application Data\MiraiCorp\WHP\WHP.INI」、Windows 11では「C:\Users\(ユーザー名)\AppData\Roaming\MiraiCorp\WHP\WHP.INI」に、INIファイルで記録されます。

なぜレジストリーではなく.INIなどというレガシーな仕様かというと、本家WHPの仕様に合わせているためです。

アンインストール

実行ファイルを削除してください。

不要であれば、上に書いた場所にあるINIファイルも削除してください。

以上でアンインストールできます。

初期化

画面位置を戻したい、記録したメモリーを消したい、などの場合は、初期化が可能です。

Windows 11の場合

  1. シチュエーション① ソフトウェア起動後、ウィンドウ左上のアイコンを右クリックする
  2. シチュエーション② ウィンドウが画面外にあるような場合、タスクバーのアイコンにマウスカーソルをあわせ、出てくるサムネイル画面の上で右クリック
  3. ①②いずれの場合も一番上に 初期化(I) とあるので、これを選択します。すると画面の左上にウィンドウが復活し、メモリーも初期化されています。

Windows 7の場合

  1. ソフトウェア起動後、タスク バー ボタンにあるアプリのアイコンを、シフトキーを押しながら右クリックします。
  2. 一番上に 初期化(I) とあるので、これを選択します。すると画面の左上にウィンドウが復活し、メモリーも初期化されています。

既知の不具合

今のところ、報告されている不具合は最新版で修正されています。

不具合があればお知らせ下さい。

更新履歴

バージョン0.17 → 0.19 (※0.18は欠番)

  • コンパイラーをほぼ最新、開発環境Visual Studio Community 2022付属のものに変更
  • 「X<>Y」ボタンが、HEX/OCT/BINモードで正常動作していなかった問題を修正
  • CLXボタンを押した後の演算が不正になっていた問題を修正
  • クリップボードからのペースト時、空白以外にタブなども削除するようにした
  • ボタンを押した場所と離した場所が違う場合は無視するようにした
  • REALモードでは、キーボードのEキーでEEXボタンと同じ動作をするようにした
  • その他、数多くのデバッグ

バージョン0.16 → 0.17

  • 64ビット版で、+/-ボタンが正常動作していなかった不具合を修正
  • 64ビット版で、マイナスの値をBASE変更したさいの挙動を変更
    REAL←→DEC間は、(小数点以下を除き)完全に値が保持されるようにした。
    負の数を持たせてHEX/OCT/BINに変更してからDECにして+/-ボタンを押した時におかしな値になることがあるのは仕様です(内部的には無符号の値となっているため)。
  • 四則演算その他のあとに、小数点(.)を入力すると、確定結果がPUSHされないまま消滅してしまう不具合を修正。
  • コピー&ペーストで、先頭や途中にスペースがあった場合に無視するようにした。
  • コピー&ペーストで、U+2212 もマイナスとして扱うようにした。

バージョン0.15 → 0.16

  • 整数演算(DEC/HEX/OCT/BIN)は、全て符号ありに変更した。BASE=DECでは負数の表示に対応させ、また+/-ボタンを有効にした(WHPの動作にあわせた)。
  • 内部では最大128ビット整数として扱われるが、0-1 の回答が FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF では何かと困るため、B/W/DW/QW の長さ選択機能を追加した。
  • 上に伴い、入力制限機構を長さから実際に格納可能な値に変更。ただし0を連続入力されたことを想定し、HEX/OCT/BINおのおのの理論上の長さでも制限を掛けた。
  • 本家WHPではBASE=HEX/OCT/BINでも+/-ボタンが有効だが、動作がバグっぽいので、当面は動作を合わせることなく無効にしておく。
  • 整数演算で、除算は符号ありに変更した(WHPの動作にあわせた)
  • 計算が確定した後、LNなどの関数を実行し、LastXするとX欄に空白が挿入されてしま うバグを修正。

不具合の報告

現在は開発中のバージョンです。不具合、未実装機能など、様々存在します。

不具合を発見されましたら、お気軽にMisskeyやMastodonなどFediverseなSNSから @miraicorp@misskey.ioまたは@miraicorp@fedibird.com か、または電子メール (info@mirai-ii.co.jp宛)でお知らせ下さい。

可能な限り修正をするよう努力します。

取扱説明書

画面

イメージマップになっています。

調べたい場所を調べることができます。

OPTION EDIT FUNCTION HELP STACK BASE ANGLE DISPLAY MEM X SIN COS TAN LOG LN X^2 SQRT ASIN ACOS ATAN PI e^X X^X 1/X X! +/- → ↓ ↑ × ÷ + - CLX LastX EEX ENTER X<>Y MEM

DEC/HEX/OCT/BINで表示されるボタンは、論理演算関数を参照してください。

メニュー → オプション(O)

  • アラーム(M) ‐ ONすると、エラー時にアラーム音が鳴ります。Alt+M
  • 言語(L) ‐ メニューの言語を選べます(英語、日本語、台湾正体字、エスペラント)
  • 終了(x) ‐ このアプリケーションを終了します。Alt+X

メニュー → 編集(E)

  • コピー(C) ‐ X欄の内容をクリップボードにコピーします。Alt+C または Ctrl+C
  • 貼り付け(P) ‐ クリップボードの内容をX欄にペーストします。Alt+P または Ctrl+V

オリジナルWHPにはなかった新機能が追加されています。

Pasteは、カンマ(,)は無視できます。

先頭より、指定したBASEで有効な数字までの範囲の文字列を採用します。16進数の場合、大文字・小文字は同一視します。

Pasteは、常に上書きとなります。入力中の値はスタック等には入りません。

現時点ではロケールは考慮していないため、小数点は常にピリオド(.)、区切りはカンマ(,)に固定しています。

メニュー → 機能(F)

  • 最小公倍数(L) ‐ XとY間で最小公倍数を求めます。Ctrl+L
  • 最大公約数(G) ‐ XとY間で最大公約数を求めます。Ctrl+G

メニュー → ヘルプ(H)

  • 公式サイト(W)... ‐ 公式サイトを表示します。Alt+W
  • このソフトウェアについて(A)... ‐ ソフトのバージョンを表示します。Alt+A

スタック

4段の表示欄があり、下から上に向かうスタックとなっています。

新しいものが入る順に、X、Y、Z、T、となります。

つまり、最新の入力のほか、過去3つまでが保存されることになります。

キー入力した数字は、一番下のX欄に入ります。

ここでEnterすると、その値はスタックに積まれ、Yとなります。また、過去のYはZに、過去のZはTとなり、過去のTは消滅します。

BASE

この電卓は、大きく2種類、細かくは5種類の動作モードがあります。

  • REAL ‐ 実数計算
  • DEC ‐ 10進数 整数計算 (8・16・32・64ビット)
  • HEX ‐ 16進数 整数計算 (8・16・32・64ビット)
  • OCT ‐ 8進数 整数計算 (8・16・32・64ビット)
  • BIN ‐ 2進数 整数計算 (8・16・32・64ビット)

REALとそれ以外の整数計算で大きく分かれます。

随時変更可能で、10進数と16進数の変換もワンタッチで可能です。

整数計算は、QW(64ビット)、DW(32ビット)、W(16ビット)、B(8ビット)で切り替えられます。全て符号ありの演算となります。また現時点ではオーバーフローチェックをしていません。

例えば10進数整数で演算結果がオーバーフローした場合、突如マイナスになったります。(例: Bで、100×2→ -56 )。これが困る場合、QWなど大きめのものを使うようにしてください。

(将来的にオーバーフローのチェック処理を入れる予定です)

ANGLE

REALモードでは、各種の三角関数が使用できます。その際の角度について、以下の3種類から選べます。

  • DEG ‐ 度数法 (1周を360度で示す角度の表現方法)
  • RAD ‐ 弧度法 (角度をラジアンで表現する方法)
  • GRAD ‐ グラード法 (1周を400度で示す角度の表現方法)

DISPLAY

REALモードでは、数値の表示方法を、以下の3種類から選べます。

  • FIX ‐ 常に指数を使用しない表示とします。
  • SCI ‐ 常に指数を使用した表示とします。
  • ENG ‐ 指数を3の倍数ごとに調整します。

また、各モードごとに、小数点以下の桁数を選べます。

MEM

現在の値を保存するメモリー機能に対応しています。

メモリーは、0番から9番までで、10個存在します。

メモリーは、REALモード(実数計算)と、DEC/HEX/OCT/BINモード(整数計算)とで、別に用意されています。ご注意下さい。(つまり相互にやり取りはできず、また都合、総計で20個存在することになります)

演算機能

各種数学関数

REALモードでは、数学関数が使用できます。原則としてスタックからX欄を取り出し(popし)て関数を実行し、結果をスタックに積み(pushし)ます。(つまりX欄が演算結果で置き換わります)

  • SIN ‐ 正弦(sin)関数
  • COS ‐ 余弦(cos)関数
  • TAN ‐ 正接(tan)関数
  • ASIN ‐ 逆正弦(arcsin)関数
  • ACOS ‐ 逆余弦(arccos)関数
  • ATAN ‐ 逆正接(arctan)関数
  • LOG ‐ 常用対数 (底=10)
  • LN ‐ 自然対数 (底=e)

※ Xが0または負数の状態で対数計算(LOGまたはLN)演算を実行すると虚数解となるためエラーとなります。

その他の演算

  • PI ‐ πをスタックに積みます
  • e^X ‐ 自然対数の底のX乗を求めます (自然対数LNの逆関数)
  • X^2 ‐ Xの自乗を求めます (2乗関数)
  • Y^X ‐ YのX乗を求めます。Yはスタックから取り出します(popします)
  • SQRT ‐ Xの平方根を求めます
  • 1/X ‐ Xの逆数を求めます
  • X! ‐ Xの階乗を求めます

※ X=Y=0でY^X演算つまり00は解なしのためエラーとなります。

※ X<0つまり負数の平方根(SQRT)演算は虚数解となるためエラーとなります。

※ X=0の逆数(1/X)演算は0除算例外のエラーとなります。

※ X<0つまり負数の階乗(X!)演算は数学で未定義のためエラーとなります。

四則演算

全て2項演算であり、「Y 演算子 X」の計算を実行します。

つまり原則としてスタックからXとYを取り出し(popし)て関数を実行し、結果をスタックに積みます(X欄に入ります)。

  • PI ‐ 加算 (足し算)
  • PI ‐ 減算 (引き算)
  • PI ‐ 乗算 (掛け算)
  • PI ‐ 除算 (割り算)

※ X=0の状態で除算(÷)を実行すると、無条件で0除算例外のエラーとなります。

論理演算関数

REALモード以外では、論理演算が利用できます。

原則としてスタックからXとYを取り出し(popし)て関数を実行し、結果をスタックに積みます(X欄に入ります)。

  • AND ‐ 論理積
  • OR ‐ 論理和
  • XOR ‐ 排他的論理和
  • XNOR ‐ 排他的否定論理和
  • SHL ‐ YをXビットぶん左シフトします
  • SHR ‐ YをXビットぶん右シフトします
  • NOT ‐ 論理否定(1の補数)を求めます (1項演算)
  • NEG ‐ 2の補数を求めます (1項演算)

各種の操作

  • X ‐ X欄の左にあるXボタンを押すと、X欄の内容をクリップボードにコピーします
  • +/- ‐ 入力中のX欄の値をプラスにしたりマイナスにしたりします
  • → ‐ 入力中の値を1桁削ります
  • ↓ ‐ スタックを下方向に回転させます
  • ↑ ‐ スタックを上方向に回転させます
  • X<>Y ‐ スタックのX欄とY欄を交換します
  • CLX ‐ 入力中のX欄を消します。計算エラー発生時のエラー解消もこのボタンで実施します。
  • LastX ‐ 計算などで得られた直前のXをスタックに積みます
  • EEX ‐ 指数を入力するため、指数欄に移動します
  • ENTER ‐ 入力中の値をスタックに積みます

メモリーの操作

メモリーは0から9まで10箇所あります。あらかじめ選んでおいてください。

  • RCL ‐ メモリーから取り出し、スタックに積みます。
  • STO ‐ X欄の値をメモリーに保存します。
  • ST- ‐ メモリーに対し、X欄の値を減算します。
  • ST+ ‐ メモリーに対し、X欄の値を加算します。

オープンソース参加者を募集しています

オープンソース化について

弊社は必要になったためこのアプリを作り、既に実用段階に達していますが、保守する時間がなく、なかなか改良をすることができません。

そこで、このWHP32をオープンソース化することを計画しています。

誰も参加者がいないのにオープンソース化しても意味がないため、やりたいという方が数名集まった時点で、BitbucketまたはGitHubのいずれかにリポジトリを作りたいと考えています。

弊社はBitbucketを主に用いていてGitHubにはアカウントがありませんが、参加希望者の意向に応じてどこを使うかを決定します。


想定仕様

  • ライセンスは、BSDライセンス相当 (二条項BSDライセンスなど) を想定。GPLやその派生には致しません
  • その際のCopyrightは、オリジナルWHP作者、弊社、そして決定された何らかのオープンソースプロジェクト名の3併記とする
  • 対象OSは、Windows (Windows 11など)で、APIは同一ソースでWin32/Win64兼用
  • 開発環境はVisual Studio (無料のVisual Studio Community 2022など)
  • プログラミング言語はC++ with STL (MFCは使用していません)
  • 画像ファイルはBMP形式 (各ボタンごとに、押されていない状態と押されている状態の2モード)
  • プログラム内の各関数はDoxygenスタイルでコメントを付与しています (Visual Studio用)

必要なスキル

  • C++とSTL (C++17やC++20の機能も一部用いています)
  • Gitの基本的な操作 (弊社ではGit for Windowsを使用しています)
  • Visual StudioやWindowsの操作

いずれも、必要に応じて検索して調べられれば十分だろうと思います。


コミュニケーション

  • Fediverseを利用した、オープンな(特定企業に依存しない)コミュニケーションを希望します。
  • まず参加希望の方はMisskeyやMastodonなどFediverseなSNSで @miraicorp@misskey.ioまたは@miraicorp@fedibird.com までご連絡下さい。フォローもいただければ幸いです。

原作者を探しています

原作者様について

原作者のNAG様を探しています。

公開前にメールを送信しましたが、返答がありませんでした。

元近所住民の方から引っ越し前の情報提供をいただきましたが、引っ越し先が不明とのことです。

弊社としては、可能な限り原作に忠実なソフトウェアを実現すべく長い時間をかけて開発を続けてきました。今後も、原作を毀損しないよう尽力する方針ですが、原作者のご意向も一度伺いたいと考えております。

消息をご存じの方は、お知らせ下さい。