|
このソフトウェアはGNU Lesser General Public Licenseの規定に従って自由に配布することができます。
全てのソースプログラム等は GitHub からダウンロードできます。 Copylight (c) 2024 Shigeo Kobayashi. All rights reserved. |
VPC(Variable Precision Calculator V2) of Bigdecimal(V11) Copyright (c) 2024 by Shigeo Kobayashi. Allrights reserved. Enter command >a = pi(); a = 0.3141592653 5897932384 6264338327 9502884197 1693993751 0582097494 4592307816 4062862089 9862803482 5342117068 E1 >$precision = 200 >b = pi() b = 0.3141592653 5897932384 6264338327 9502884197 1693993751 0582097494 4592307816 4062862089 9862803482 5342117067 9821480865 1328230664 7093844609 5505822317 2535940812 8481117450 2841027019 3852110555 9644622948 9549303819 6E1 >c = a-b c = 0.1785191348 6717693352 9061553904 4941776827 4640591871 5188825497 1589729806 1478894440 3553770510 4506961804 E-100 >詳細は後述するとして、
Windows については実行ファイル(32-bit:vpc.exe と bigdecimal.dll)等、必要なファイルを含む圧縮ファイルがこちらからダウンロードできます。ダウンロードした bigdecimal_win.zip を適当なフォルダ(例えば C:\VPC\ 等)にコピーしてから、エクスプローラー等を使用して、展開してください。展開されたファイル vpc.exe をダブルクリックすれば直ぐに利用できます。その他のOS(LINUX等):
デスクトップにショートカットを設定する場合は、vpc.bmp というファイルをアイコンに設定してください。
全てのソースプログラム等を GitHub からダウンロードしてください。
ダウンロードしたら、 makefile の内容を参考に実行ファイルをビルドしてからシステムに応じて手動でインストールしてください。
?? ... ヘルプメッセージを表示します。
?* ... 全ての変数と環境設定の値を表示します。
?$ ... 全ての環境設定の値を表示します。
a='pi'() は正しいけど、a=' pi '() はエラーです(piは関数名)。
a=1000 は正しい。 a= " - 10.0 1" も a=-10.01 と見なされ、正しい記述です(文字列で与えられた数値表現中のスペース、または$formatで指定された文字、は無視されます)。
! dir !"dir *.txt"
| 関数名 | 説明 | 使用例 | 備考 |
|---|---|---|---|
| atan(a) | 逆正接 (arctangent)の計算 c = tan-1(a) |
>a=atan(0.5) a = 0.4636476090 0080611621 ... 5653E0 | |a|<=1 |
| sin(a)/cos(a) | 三角関数の計算 |
>a=sin(1);b=cos(1);c=a*a+b*b a = 0.8414709848 0789650665 ... 5435E0 b = 0.5403023058 6813971740 ... 4357E0 c = 0.1E1 |
与える引数はラジアン(radian)。度(degree)ではありません。 引数の値はなるべく小さくする必要があります(引数 a が3.14... より大きい場合、a=a-3.14.. 等と調節すること)。 |
| exp(a) | ネイピア数(自然対数の底 ea)のべき乗を計算します。 | >a=exp(1) a = 0.2718281828 4590452353 ... 4E1 | |
| ln(a) | ネイピア数 e を底とするの自然対数の計算 | >a=ln(0.5);b=exp(a) a = -0.6931471805 5994530941 723... 42E0 b = 0.5E0 | 0 < a <= 2 |
| pi() | 円周率(π)の計算 | >a=pi() a = 0.3141592653 5897932384 ...068 E1 | () が無いとエラー |
| sqrt(a) | 平方根の計算 a=b1/2 | >a=sqrt(5) a = 0.2236067977 4997896964 ...275 E1 | a >= 0 |
| iterations() | 直前の繰返し計算の回数 | >a=sqrt(2);b=iterations() a = 0.1414213562 3730950488 0168872420 ...7E1 b = 0.2E2 | iterations() <= $max_iterations |
| 関数名 | 説明 | 使用例 | 制限 |
|---|---|---|---|
| abs(a) | 絶対値の計算 | >a=abs(-1) a = 0.1E1 | |
| power(a,n) | べき乗の計算 b=power(a,n) => b=an | >a=power(2,-2) a = 0.25E0 | n は正または負の整数でなければならない。 a = power(2,0.5) はエラー。 |
| int(a) | 整数部分の取り出し | >a=int((1/3)*100) a = 0.33E2 | |
| frac(a) | 少数部分の取り出し | >a=frac((1/3)*100) a = 0.3333333333 3333333333 ... 33 E0 | |
| digits(a) | 有効桁数 | >a=(1/3)*2;b=digits(a) a = 0.6666666666 6666666666 ... 666 6667E0 b = 0.104E3 | |
| exponent(a) | 指数部分の取得 a=0.xxxx*10n の n | >a=power(10,3);b=exponent(a) a = 0.1E4 b = 0.4E1 |
| 設定名 | 説明 | 使用例 |
|---|---|---|
| trim(a,n) | trim(a,n) は a の左端から数えて n+1 桁目を $round の指定に従って丸めて、全体を最大 n 桁の数値とします。 | >?$round $round = 'half_up' >$format=F >a=1234.5678 a = 1234.5678と設定して、各計算結果は下段の通り。 |
| round(a,i) | round(a,i) は a の小数点からの相対位置で丸め操作を実行します。 もし i>=0、なら小数点の位置から右の (i+1)番目の数字が $round の指定に従って丸められます。 従って、小数点から右の数字は最大で i 個となります。 もし i<0 なら、小数点位置から左の i 番目の数字が $round の指定に従って丸められます。結果として、小数点の左に最小でも i 個のゼロが並ぶことになります。 | >b=trim(a,4);c=round(a,1);d=round(a,-1);e=round(a,0) b = 1235 c = 1234.6 d = 1230 e = 1235 |
| 丸め操作の値 | 意味 | 使用例 |
|---|---|---|
| up | ゼロから離れる方向に切り上げる。 | >$round=up;a=round(-1/3,0) a = -0.1E1 |
| down | ゼロに近づく方向に切り捨てる。 | >$round=down;a=round(-1/3,0) a = -0.0 |
| half_up | ゼロから離れる方向に四捨五入。(初期設定). | >a=round(-2/3,3) a = -0.667E0 |
| half_down | ゼロから離れる方向に五捨六入。 | >$round=half_down;a=round(5.5555,3) a = 0.5555E1 |
| ceil | 正の無限大方向に切り上げ。 | >$round=ceil;a=trim(1.2345,3);b=trim(-1.2345,3) a = 0.124E1 b = -0.123E1 |
| floor | 負の無限大方向に切り下げ。 | >$round=floor;a=trim(1.2345,3);b=trim(-1.2345,3) a = 0.123E1 b = -0.124E1 |
| half_even | "Banker's rounding" と呼ばれる丸め方法で、切り上げ・切り下げの結果として末尾の数字が偶数になるように丸められます。 | >$round=half_even >a=trim(2.125,3) a = 0.212E1 >a=trim(2.135,3) a = 0.214E1 |
| 繰返し計算(入力)・条件文 | 説明 | 使用例 |
|---|---|---|
| repeat n; | repeat 以降・行末までの(複数)実行文を n 回繰り返し実行します。n は整数値でのみ指定可。 | 10の階乗の計算(10!) >n=0;s=1;repeat 10;n=n+1;s=s*n >?s s = 0.36288E7 |
| while a op b; | while の次の条件式 a op b が成立すれば(成立している間)以降の行末までを繰り返し実行します。 a または b は変数か数値(関数や数式は指定できません)です。ただ、a と b 共に数値を指定することはできません。 op は以下のどれかです。
|
10の階乗の計算(10!) >n=10;s=1;while n>0;s=s*n;n=n-1 >?s s = 0.36288E7 |
| if a op b; | 条件式 a op b が成立していれば以降(行末まで)のステートメントを実行します。 if の後ろに 'break' を置くことで、繰返し計算を条件によって終了させることができます。 break は以後のステートメントの実行を(繰り返しも含めて)中止します。 |
10の階乗の計算(10!) >n=0;s=1;repeat 100;n=n+1;s=s*n;if n>=10;break >?s s = 0.36288E7 |
| load 'file' 変数1 変数2 ...変数n | 指定されたファイル 'file' をオープンし、
一行を読み込んで (VPCが数値と見なせる部分の)数値を変数1から順に(変数nまで)代入した後で、load 以降の行末までのステートメントを実行します。 上記処理を行単位にファイルの最後まで実行します。 各行は最低でも指定された変数分(n個)の数値が記述されている必要があります。一行でn個以上の数値は無視されます。 |
data.txt の内容 1 a2 b 2 ;;3 4 5 6 '-11' ( 12) - 13;; 21,, 22 ,23 実行結果 >load data.txt a b c;?a;?b;?c a = 0.1E1 b = 0.2E1 c = 0.3E1 a = -0.11E2 b = 0.12E2 c = -0.13E2 a = 0.21E2 b = 0.22E2 c = 0.23E2 |
| 設定名 | 説明 | 使用例 |
|---|---|---|
| $format |
数値の出力形式を指定します。初期値は以下の通り >?$format $format = '10*E q' # 初期値
|
>?$format $format = '10*E q' # 初期値 >a=123456789012345 a = 0.1234567890 12345E15 >$format = 5 >?a a = 0.12345 67890 12345 E15' >$format=+ >?a a = +0.12345 67890 12345 E15 >$format=, >?a a = +0.12345,67890,12345,E15 >$format=Q >?a a = '+0.12345,67890,12345,E15' >$format = F;?a a = '+12345,67890,12345' >?$format $format = '5+F,Q' >$format = " " >?$format $format = '5+F Q' |
| $max_iterations | 繰返し計算の最大繰返し数。 | 初期値: 10000 |
| $precision | 変数 a,b,...z の最大桁数を指定します。例えば a=b*c+d のような計算は、b*c+d の桁数は誤差が出ないように(1/3のような割り算は特別)最大限の計算桁数が確保されます。そして、最終的に左辺変数に計算結果が代入されるときに右辺の桁数が $precision より大きい時には、以下の $round 指定に従って $precision桁に丸められます。 | 初期値: 100 |
| $round | 丸め操作の指定をします。 | 初期値: half_up(四捨五入) |
| $title | 任意の文字列を設定できます。 | 初期値: "" |
| $a,$b,...$y,$z | こちらも任意の文字列を指定できます。各変数に関連付けたコメントを記入すれば便利かもしれません。 | 初期値: "" |
| I/O関係 | 説明 |
|---|---|
| read 'ファイルパス' | 実行ステートメントを記述したテキストファイルを読み込み、記述されているコマンドを実行します。とくに、 write コマンドで出力されたファイルを読み込めば、write コマンド実行時の状態になります。 |
| write 'ファイルパス' | 現状の環境設定と全ての変数の値を指定されたファイルにテキスト形式の代入文で書き込みます。後に read コマンドに同じファイルを指定すれば状態を復元することができます。 |
a = -1*0; ?a # => a = -0 b = 1*0; ?b # => b = 0 c = a*b; ?c # => c = -0 $d = "0 == -0" if a==b; ?$d # => "0 == -0"