slcalc        English

ver.1.2.1 on 15th December 2004

Linux Zaurus 用の科学電卓です。定数・関数を自由に定義できることが特長です。

アプリの download [71KB] :   slcalc_1.2.1_arm.ipk
ソースの download [42KB] :   slcalc_1.2.1_arm.tar.gz

NEW: SL-C3000に対応。また、n進数をサポート
SL-C700/750/760/860/3000上で確認をとっています。それ以外の機種でも動作すると思いますが、実機動作は確認しておらず使いにくいかもしれません。その場合にはソース・ファイルを修正・コンパイルしてください 。
GPLライセンスのフリーウエアです。
本プログラムに関し、数人の方から貴重な助言をいただきました。ここに感謝致します。本プログラムへの要望、また本プログラムを修正・訂正された場合には(cam)までお知らせください。このサイトからリンクすることも考えます。
アプリケーション変更履歴

【インストール上の注意】

SL-CXXXXではインストール後、アイコン長押しして「アプリケーションを VGA(480X640ドット) の画面に最適化して実行する」のチェックをはずして下さい。
「アプリケーションを高速起動する」をチェックした場合、1.6MBのメモリーを消費します。
起動後、Options-Settingで設定すると、/home/zaurus/Settings に slcalc.conf の設定ファイルが作成されます。SL-CXXXX以外の機種でこのディレクトリが無い場合には、/home/zaurus/Settings ディレクトリを作成して書き込みを許可して下さい。この操作をしなくても動作しますが buffer への save 機能が無視されます。
CF, SDカードにインストール可能です。

【特長】

定数・関数を自由に定義して使うことができます。これらの定義はファイルから読み込むことも可能です。
すべての科学関数は有理多項式等で近似することができ、slcalc はこれをサポートします。例えば 0次の第2種変形ベッセル関数 K0 は次のようになります。

K0(x)=
(
    if (x<=2) then (
        t=x/3.75
        t2=t*t
        x2=x*x/4
        y=1.0+t2*(3.5156229+t2*(3.0899424+t2*(1.2067492+t2*(.2659732
           +t2*(.0360768+t2*.0045813)))))
        (-ln(.5*x)*y-.57721566+x2*(.4227842+x2*(.23069756
        +x2*(.0348859+x2*(.00262698+x2*(.0001075+x2*.0000074))))))
    ) else (
        t=2.0/x
        y=1.25331414+t*(-.07832358+t*(.02189568
           +t*(-.01062446+t*(.00587872+t*(-.0025154+t*.00053208)))))
        exp(-x)/sqrt(x)*y
    )
)

また、有効精度は15桁です。
 

終了時すべての状態を保存しますので、再開時そのまま続けることができます。この設定は解除することもできます。

定数は配列をとれません。関数の引数は8までです。

  kB = 1.380658E-23

   coth(x) = (exp(x)+exp(-x))/(exp(x)-exp(-x))

   B(J, x) = (2*J+1)/(2*J)*coth((2*J+1)*x/(2*J))-coth(x/(2*J))/(2*J)

   f(x1, x2, x3, x4, x5, x6, x7, x8) = x1+x2+x3+x4+x5+x6+x7+x8

 

SL-CXXXX の場合、スタイラス・ペンを一切使わずにキーボードのみで操作できます。逆にスタイラス・ペンのみでも操作できるように考慮しています。

【定数・関数定義ファイル】

 いくつか download できるように置いておきます。

 

    基本物理定数

    相補誤差関数     erfc( ) 

    ガンマ関数    gamma( )

    標準正規分布の累積分布関数の逆関数    normsinv( )

    第2種変形ベッセル関数    K0( )    K1( )

 

    積分    integral( ) 
       integral(xs, xe, n) : f(x) を xs から xe まで積分。n は区間数。

    関数の根    solve( ) 
      solve(xs, xe, dx) : f(x)=0 の解を xs から xe の範囲で見つけ最初に見つかった x を返す。
      2分割法を用い、初期区間を dx で指定する。

【使い方】

左上の領域に計算式を書き、【Ent】をタップあるいは Enter キーを押すと結果が下に表示されます。

結果表示部の下にある【n】【f】【e】ボタンは出力書式です。

 【n】は通常は浮動小数点書式ですが、有効精度により指数書式となります。

 【f】は浮動小数点書式 例: -0.772764

 【e】は指数書式 例: -7.72764e-01

三角関数のベースは【rad】ラジアン【deg】度のボタンで設定します。

右上ボタンは次の動作をします。

 【BS】入力のカーソル前1文字を消去します。(バックスペース)

 【C】 入力をすべて消去します。(クリア)

 【<】 1つ前の入力を呼び出します。これは繰り返すことができます。

 【>】 1つ後の入力を呼び出します。これは繰り返すことができます。

その下の2つのリストは定数領域、関数領域です。

定数領域に Ans , M , pi が表示されます。Ans は直前に行った計算結果です。M はメモリとして使うために設けました。任意の定数名を使うことができますが、ペンタッチのみでキーボード入力をしなくても済むようにという配慮から、一般的なメモリー変数として M を登録しています。数字と組み合わせることにより M0, M1, 等が入力できます。pi は円周率を表します。

関数領域には、abs(絶対値)sqrt(平方根)exp(指数)ln(自然対数)log(常用対数)sin, cos, tan(三角関数)asin, acos, atan(逆三角関数)int(超えない整数)round(近い整数)が表示されます。関数をタップすると関数名の後に自動的に( )が挿入され、カーソルが( )の間にきます。

定数・関数は自由に定義することができます。

 定数の設定例: x = 2.236

 関数の設定例: sinh(x) = (exp(x)-exp(-x))/2

これらを入力すると、定数・関数の領域に名前が登録され、以後タップすることにより使うことができます。

【設定の変更】

Options-Settingで設定を変えることができます。

format にはC言語のprintf 出力書式を入れてください。

save buffer にはバッファーをセーブするかどうかのチェックとセーブする場合のファイル名入れてください。カードに設定したい時等に変更してください。

save buffer を設定しておくと slcalc 起動時、以前の状態を保ったまま再開できます。バッファーのサイズは約2KB-6KB(定数・関数の定義量により異なる)です。

設定を反映したい場合にはOK、反映せずに終了したい時にはCancelをタップします。キーボードからはTabで OK、Cancel ボタンに移動し、Enter を押してください。

【ユーザー定義定数・関数の編集】

Options - Edit constants & functions  でユーザー定義定数・関数を編集できます。不要になった定数・関数を消去したい場合にはdeleteの所をチェックして下さい。

【ログ表示】

Options - show Log で過去の計算履歴が表示されます。終了は枠外(浅緑以外の領域)をタップするかEnterキーを押して(SL-CXXXXのみ)ください。

【ファイル読み込み】

Options - load File でファイルから数式をロードすることができます。途中でやめたい時は 【Cancel 】をタップあるいは Cancel キーを押して下さい。

間違って別のファイルを読み込まないように拡張子 .slc のファイルのみとします。ファイルはテキスト・ファイル形式で作成して下さい。

【キーボード入力】

キー操作しやすいように次の割り当てを追加しています。(SL-CXXXX VGA表示のみ)

    Fn + P : +  (plus)
    Fn + M : -  (minus)
    Fn + T : *   (times)
    Fn + D : /  (divide)
    Fn + G : >  (greater)
    Fn + L : <  (less)
    Fn + F : toggle format n, f, e
    Fn + S : toggle angle rad, deg
    Fn + O : select constant list (Tabで抜けられます)
    Fn + Q : Fn-Oと同じ。(Fn-OはKeyHelperで通常 { に設定されることが多いので)
    Fn + K : select function list (Tabで抜けられます)
    Fn + A : Ans -> Clipboard
    Fn + U : (
    Fn +  I : )
    Fn + Y : %
    Fn + cursor Up : clear
    Fn + cursor Down : new line
    Fn + cursor Left : recall
    Fn + cursor Right : backrecall
    shift + 1 : format n
    shift + 2 : format f
    shift + 3 : format e
    shift + 6 : angle rad
    shift + 7 : angle deg
    shift + 4 : select constant list
    shift + 0 : select function list

【計算の詳細仕様】

入力において大文字・小文字どちらを用いても同じ結果になります。

演算は次のものが使えます。(上のほうが優先順位が高くなります。)

  1)   (    )
  2)   NOT
  3)   ^
  4)   *   /   %
  5)   +   -
  6)   <   >   <=   >=
  7)   EQ   NE
  8)   AND
  9)   OR
10)   WHILE IF  THEN  ELSE
11)   =

ここに ^ はべき乗、EQ は等しい、 NE は等しくない、を表します。また、論理演算において 0 以外は真として扱われ、演算結果は、真は 1 偽は 0 となります。

IF THEN ELSE はC言語の ?: と同等です。

= は代入を表します。=の左に定数名(関数名)を書きますが、定数名(関数名)は最初の文字がアルファベット、その後はアルファベットか数字、の任意の長さのものが使えます(ただし最初の64文字までを識別)。100個まで定数名(関数名)を登録できます。また関数の引数は8個までとしています。

内蔵関数は次のとおりです。
   sin, cos, tan, asin, acos, atan, exp, sqrt, ln, log, abs, int, round

数値に次の単位をつけることができます。

T(1e12), G(1e9), MEG(1e6), K(1e3), m(1e-3), u(1e-6), n(1e-9), p(1e-12), f(1e-15), a(1e-18)

例えば 2.7p は 2.7e-12 を、0.015G は 1.5e7 を表します。また、数値と単位の後に任意のアルファベットを続けることができますが、これは実際には無視されます。例えば 2.7pA, 0.015Gohm は 2.7e-12、1.5e7 を表します。

コメントを{と}の間に入れることができます。

空白・タブ・改行は語の区切りと見なされるか(例 x=3 y=x-1)、無視されます(例 x = 3 * y)。

語の区切りを明示的に入れたい場合には : か ; を用いて下さい。

式は続けることができます。最後の演算結果が値になります。 例) x=3 y=2 x/y は 1.5 になります。

特殊な使い方として 2*(x=2 y=3 x/y *5-1) は 14/3 になります。

これは特に関数の定義において便利です。

erfc(x) = (
   t = 1/(1+.3275911*abs(x))
   y = exp(-x*x)*t*(.254829592+t*(-.284496736+t*(1.421413741+t*(-1.453152027+t*1.061405429))))
   if (x>=0) then y else 2-y
)

定数・変数はすべてグローバルです。関数の中で使われた定数・変数(上の例ではt, y)により、t, y の内容が書き変えられることに注意して下さい。

WHILE 式1 式2 により繰り返し実行が可能です。式1が真である限り式2を評価し続けます。次はf(x)の最も単純な積分式です。

integral(xs, xe, n) = (
   dx=(xe-xs)/n
   s=0 i=0
   while i<n (
      s=s+f(xs+dx*(i+0.5))
      i=i+1
   )
   s*dx
)

また、関数の再帰的呼び出しも可能です。次はガンマ関数の式です。

gamma(x)=(
   if x>2 then (x-1)*gamma(x-1)
   else if x<1 then gamma(x+1)/x
   else (
      t1=x-1
      1+t1*(-.577191652+t1*(.988205891+t1*(-.897056937
       +t1*(.918206857+t1*(-.756704078+t1*(.482199394
       +t1*(-.193527818+t1*.035868343)))))))
   )
)

無限ループに入ると kill するしか止める方法がありませんので使用には充分注意して下さい。

【 n 進数 】

n 進数定数

    0b_____.___   : 2進数    例:0b1011.11 = 11.75

    0o_____.___   : 8進数    例:0o123.456 = 83.58984375

    0x_____.___   : 16進数  例:0xffff = 65535

    0ndn______.___ : d進数 例:0n12n3ba.2 = 57.41666..

n 進数出力

    Options-Setting の format において最後に /n を付加することにより n 進数表示。

    例: %6.2f/16    16進数表示で小数点2桁まで表示(小数点3桁目をまるめる)。

       例えば 0x3f2.23f+0xaf4d.edf =0xb340.11e → 0xb340.12

   %6.2f/b, %6.2b/o, %6.2b/x のような指定(2進、8進、16進)も可能。

 

【履歴】

ver. 1.2.1 15th November 2004 

       SL-C3000 キーコード ( / , ? ) 変更に対応
        n 進数に対応

ver 1.1.0 10th August 2003

表示部のフォントを大きくした
while 文を追加
関数の再帰的呼び出しを許す
if then else 中での定数・関数定義での不都合を修正
garbage collection の追加

slcalc_1.1.0_arm.ipk
slcalc_1.1.0_arm.tar.gz

ver 1.0.0 30th July 2003

ファイルからの読み込みを追加
最初の slcalc.init 読み込みを廃止
定数・関数を再定義した時、リストに反映されない不都合を修正
関数の引数チェックを強化
ソースの全面チェック
アイコン変更

slcalc_1.0.0_arm.ipk
ソース・ファイル

ver 0.3.0  2nd March 2003

VGA版と QVGA版を統合し、VGA ビュースタイルをサポートした
Menuキーまわりを修正した

VGA, QVGA共通
slcalc_0.3.0_arm.ipk
ソース・ファイル

ver 0.2.0  23rd February 2003

キーボードからすべて操作できるようにした
save bufferがチェックされているとき、前回と同一状態で再開できるようにした
定数・関数の編集機能を追加した

SL-C7XX VGA画面専用
slcalc_0.2.0_arm.ipk
ソース・ファイル

QVGA画面専用
slcalc_0.2.0Q_arm.ipk
ソース・ファイル

ver 0.1.2  15th February 2003

menu バー edit, options, help を設けた
cut/copy/pasteをmenu バー editに移動し、Ans->Clipboardを追加
optionsで設定パラメータの変更、ユーザー定義定数・関数一覧、ログ表示ができるようにした
init file中で2行以上に渡る式に対しエラーとなるのを訂正

SL-C7XX VGA画面専用
slcalc_0.1.2_arm.ipk
ソース・ファイル

QVGA画面専用
slcalc_0.1.2Q_arm.ipk
ソース・ファイル

ver 0.1.1  7th February 2003

入力行に対しcut/copy/pasteの機能を追加
キーボード入力とペンタッチの整合性をとる
前の入力を開始時load/終了時storeするようにした(/home/zaurus/Settings/slcalc.buffer)
slcalc.initの位置を/home/zaurus/Settings/下に変更

ver 0.1.0   1st February 2003

最初のバージョン