使い方

本keisanサービスは、桁数可変型演算技術を応用して精度保証の実現をめざした計算サービスです。

keisanの特徴

1.計算式の演算桁数を変えて計算できます。

(演算桁数の設定は、"桁数"指定で行います)

桁数 6√5 =sqrt(5) =2.23607
桁数 14√5 =sqrt(5) =2.2360679774998
keisan(0.9-0.3*3) =0
Excel(0.9-0.3*3) =1.11022E-16
(2進10進変換誤差)

2.計算精度の正しい桁までを自動判断で求めます。

桁数 61-0.999876 =1.24000E-4
桁数 10gamma(3.5) =3.323350970

3.複素数、統計関数、特殊関数、テーブル計算が扱えます。

[桁数 6 で設定]
複素数計算 (1+i)^(1+i) =0.273957+0.583701i
誤差関数x =0.1 erf(x) =0.112463
テーブル計算sqrt(x) x =2,1,5
xsqrt(x)
21.41421
31.73205
42
52.23607
62.44949

4.式ライブラリーを利用できます。

三角形の面積
(a,b,c)
s=(a+b+c)/2; a=3; b=4; c=5;
sqrt(s*(s-a)*(s-b)*(s-c))

参考資料

特許登録: "keisan"サービスの十進計算装置
日本 特許4483491(2010/4/2登録)
米国 USP7716267(2010/5/11登録)

このページの先頭へ

計算式の記述規則

1.数値

0,1,2,3,4,5,6,7,8,9, .(小数点), E(指数部), i(虚数), +, -

入力例 説明
12340.56789 1.234056789E4と同じ
E2 100
1.23E+4 12300    E+の+は指数符号で省略可
1.23E-4 0.000123  E-の-は指数符号で省略不可
i 0+1i
E+2i 0+100i
1.23+4.56i 複素数は括弧で括ると確実
1.23E3+4.56E2i 1230+456i 
1.23E-3-4.56E+2i 0.00123-456i

注意:指数部は大文字 E を使用。(小文字 e は自然対数の底)

2.変数

英字又は漢字で始まり、英数字、漢字で構成。
特殊記号および予約語は使えない。

変数名の例 a sinx a3 利率 など
使えない例 e i inf sin E などの予約語
#abc 3abc など

3.関数

関数名と括弧に囲まれた1個以上の引数で構成。
2個以上の引数の場合は、カンマ","で区切る。
引数は、数値、変数、関数、式が記述できる。

例) sin(x)
normalcd(x,μ,2)
normalcd(x+y,ln(12),σ)

引数の無い定数は、括弧をつけない。

例) pi inf e

4.演算子

演算子には、+ , - , * , / , ^ ,! , = があり、
数値、変数、関数の各要素間での演算を指示する。

演算例 説明
要素1 + 要素2 要素1 と要素2 を加算する
要素1 - 要素2 要素1 から要素2 を減算する
要素1 * 要素2 要素1 と要素2 を乗算する( * は省略可)
要素1 / 要素2 要素1 を要素2 で除算する
要素1 ^ 要素2 要素1 を要素2 だけべき乗する
要素1 ! 要素1 を階乗する(1要素だけの演算)
要素1 = 要素2 要素2の演算結果を要素1に代入する。
従って要素1は変数でなければならない。

5.式

数値、変数、関数の各要素を演算子で結合したもの。
式を一要素として、更に演算子で結合できる。
演算順序は、後述の「式の演算順序」に従う。
例) 要素1 + 要素2 - 要素3 * 要素4 / 要素5 ^ 要素6 ! + ・・・

6.その他

-(マイナス)は、指数部表現を除き2項演算子とみなされる。
但し、式の最初、開き括弧とカンマの直後は数値符号とみなす。

例)-a+b  →  (0-a)+b
-a^b  →  0-(a^b)
a^-b  →  Error
a^(-b)  →  a^(0-b)
a*b;-a*b  →  a*b;0-(a*b)
a*-b  →   Error

式を見易くする為に、スペースで間隔を空けて記述できる。

このページの先頭へ

式の演算順序

  • 優先順位の高い演算子から順に演算する。
  • 同順位の演算子は、左側から演算する。※但し、べき乗演算子(^)のみ右側から演算する。
  • 括弧内は優先して演算する。
  • 多重括弧は、内側の括弧が優先される。

演算子の種類と優先順位

優先順位 演算子 意味
高い




低い
関数 組込み関数
!!, !, ^ 二重階乗、階乗、べき乗
*, / 乗算、除算
+, - 加算、減算
= 代入

間違い易い式の記述事例

括弧の省略による演算順序
2+3*42+(3*4)加算より乗算が優先して計算
3*4^53*(4^5)乗算よりもべき乗が優先
sin(2)^3(sin(2))^3べき乗よりも関数が優先
1/2i1/(2i)虚数記号が優先
3!!!(3!!)!二重階乗が階乗より優先
乗算記号が省略された式
3a3*a として計算
a3×a3 は変数名
a(b+c)×a*(b+c)でなく、a はユーザ定義関数
(a+b)(b+c)(a+b)*(b+c) として計算

このページの先頭へ

数値・演算子及び定数

関数名および機能 予約語
数値
  数値 1234567890 0 ~9
小数点 0.123 .
符号 -123, +456 +,-
指数 1.23E-45 E
虚数 2+3i i
演算子
  加算 x+y +
減算 x-y -
乗算 x*y *
除算 x/y /
べき乗 x^y ^
階乗 n! !
2重階乗 n!! !!
代入 a=123 =
マルチ式
  式の区切り a=2+3; b=4/7 ;
定数
  自然対数の底 e =2.71828... e
無限大 inf
円周率 π =3.14159.. pi
オイラー数 γ =0.5772... euler
真値 true =1 true
虚値 false =0 false

このページの先頭へ

初等関数

関数名および機能 予約語
対数関数と指数関数
  開平 sqrt(x)
常用対数 log log(x)
自然対数 ln ln(x)
指数関数 ex e^x
べき乗関数 xy x^y
三角関数
  正弦関数 sin sin(x)
余弦関数 cos cos(x)
正接関数 tan tan(x)
逆正弦関数 sin-1 asin(x)
逆余弦関数 cos-1 acos(x)
逆正接関数 tan-1 atan(x)
双曲線関数
  双曲正弦 sinh sinh(x)
双曲余弦 cosh cosh(x)
双曲正接 tanh tanh(x)
逆双曲正弦 sinh-1 asinh(x)
逆双曲余弦 cosh-1 acosh(x)
逆双曲正接 tanh-1 atanh(x)
組合せ・順列
  組合わせ nCr combination(n,r)
順列 nPr permutation(n,r)
階乗 x! x!
2重階乗 x!! x!!
数値関数(実数)
  x以下の最大整数 int(4.2) =4
int(-4.2) =-5
int(x)
x以上の最小整数 ceiling(4.2) =5
ceiling(-4.2) =-4
ceiling(x)
整数部分 IP(4.2) =4
IP(-4.2) =-4
IP(x)
小数部分 FP(4.2) =0.2
FP(-4.2) =-0.2
FP(x)
xをyで割った余り mod(9,5) =4
mod(-9,5) =1
mod(x,y)
y*FP(x/y) remainder(9,5) =4
remainder(-9,5) =-4
remainder(x,y)
四捨五入 round(2.35,1) =2.4
round(-2.35,1) =-2.4
round(x,n)
切捨て rounddown(2.34,1) =2.3
rounddown(-2.34,1) =-2.4
rounddown(x,n)
切上げ roundup(2.34,1) =2.4
roundup(-2.34,1) =-2.3
roundup(x,n)
IP(x*10n)/10n truncate(2.34,1) =2.3
truncate(-2.34,1) =-2.3
truncate(x,n)
実数のランダム random decimal number in [0,1] random_f()
実数のランダム random decimal number in [a,b] random_f(a,b)
整数のランダム random integer number in [a,b] random_i(a,b)
数値関数(複素数)
  符号 sign(z) =1,0,-1 sign(z)
共役複素数 x+iy → x-iy conjugate(z)
実数部分 x+iy → x Re(z)
虚数部分 x+iy→ y lm(z)
絶対値 |z| =|re| =r abs(z)
偏角 re → θ argument(z)
直交座標変換 re → x+iy cartesian(z)
直交座標変換 (r,θ) → x+iy cartesian(r,θ)
極座標変換 x+iy → re polar(z)
極座標変換 (x,y) → re polar(x,y)
最大・最小
  最大値(引数最大20個) max(1,2,3,4) = 4 max(a,b,c,d,...)
最小値(引数最大20個) min(1,2,3,4) = 1 min(a,b,c,d,...)

このページの先頭へ

統計関数

連続分布関数
関数名 予約語
Q: 上側累積確率
f: 確率密度
x: パーセント点
λ: 非心率
標準正規分布 Q: normalcd(x)
f: normalpd(x)
x: normalicd(Q)
正規分布 Q: normalcd(x,μ,σ)
f: normalpd(x,μ,σ)
x: normalicd(Q,μ,σ)
対数正規分布 Q: lognormalcd(x,μ,σ)
f: lognormalpd(x,μ,σ)
x: lognormalicd(Q,μ,σ)
カイ2乗分布 Q: chi2cd(x,ν)
f: chi2pd(x,ν)
x: chi2icd(Q,ν)
スチューデントのt分布 Q: tcd(x,ν)
f: tpd(x,ν)
x: ticd(Q,ν)
F分布 Q: fcd(x,ν1,ν2)
f: fpd(x,ν1,ν2)
x: ficd(Q,ν1,ν2)
非心カイ2乗分布 Q: ncchi2cd(x,ν,λ)
f: ncchi2pd(x,ν,λ)
x: ncchi2icd(Q,ν,λ)
λ: ncchi2il(P,x,ν)
非心t分布 Q: nctcd(x,ν,λ)
f: nctpd(x,ν,λ)
x: ncticd(Q,ν,λ)
λ: nctil(Q,x,ν)
非心F分布 Q: ncfcd(x,ν1,ν2,λ)
f: ncfpd(x,ν1,ν2,λ)
x: ncficd(Q,ν1,ν2,λ)
λ: ncfil(Q,x,ν1,ν2)
一様分布 Q: uniformcd(x,a,b)
f: uniformpd(x,a,b)
x: uniformicd(Q,a,b)
指数分布 Q: exponentialcd(x,b)
f: exponentialpd(x,b)
x: exponentialicd(Q,b)
ワイブル分布 Q: weibullcd(x,a,b)
f: weibullpd(x,a,b)
x: weibullicd(Q,a,b)
ガンマ分布 Q: gammacd(x,a,b)
f: gammapd(x,a,b)
x: gammaicd(Q,a,b)
ベータ分布 Q: betacd(x,a,b)
f: betapd(x,a,b)
x: betaicd(Q,a,b)
ラプラス分布 Q: laplacecd(x,a,b)
f: laplacepd(x,a,b)
x: laplaceicd(Q,a,b)
コーシー分布 Q: cauchycd(x,a,b)
f: cauchypd(x,a,b)
x: cauchyicd(Q,a,b)
ロジスティック分布 Q: logisticcd(x,α,β)
f: logisticpd(x,α,β)
x: logisticicd(Q,α,β)
パレート分布 Q: paretocd(x,xm,α)
f: paretopd(x,xm,α)
x: paretoicd(Q,xm,α)
一般化パレート分布 Q: gparetocd(x,μ,σ,ξ)
f: gparetopd(x,μ,σ,ξ)
x: gparetoicd(Q,μ,σ,ξ)
レヴィ分布 Q: levycd(x,μ,c)
f: levypd(x,μ,c)
x: levyicd(Q,μ,c)
注)下側累積確率Pは上記予約語末尾にlowerを付加
 例)P=normalcdlower(x),
        x=normalicdlower(P)
離散分布関数
関数名 予約語
Q: 上側累積確率
f: 確率密度
x: パーセント点
λ: 非心率
ポアソン分布 Q: poissoncd(x,λ)
f: poissonpd(x,λ)
x: poissonicd(Q,λ)
λ: poissonil(Q,x)
二項分布 Q: binomialcd(x,n,p)
f: binomialpd(x,n,p)
x: binomialicd(Q,n,p)
負の二項分布 Q: negbinomialcd(x,k,p)
f: negbinomialpd(x,k,p)
x: negbinomialicd(Q,k,p)
幾何分布 Q: geometriccd(x,p)
f: geometricpd(x,p)
x: geometricicd(Q,p)
超幾何分布 Q: hypgeometriccd(x,n,M,N)
f: hypgeometricpd(x,n,M,N)
注)下側累積確率Pは上記予約語末尾にlowerを付加
 例)P=poissoncdlower(x,λ),
        x=poissonicdlower(P,λ),
        λ=poissonillower(P,x)

このページの先頭へ

ベッセル関数

ベッセル関数
関数名 予約語
f(x)
f '(x)
f-1(0), s=1,2,..
f '-1(0), s=1,2,..
第1種
 ベッセル関数
Jν(x) besselj(ν,x)
besseljdf(ν,x)
besseljzeros(ν,s)
besseljdfzeros(ν,s)
第2種
 ベッセル関数
Yν(x) bessely(ν,x)
besselydf(ν,x)
besselyzeros(ν,s)
besselydfseros(ν,s)
第1種
 変形ベッセル関数
Iν(x) besseli(ν,x)
besselidf(ν,x)
第2種
 変形ベッセル関数
Kν(x) besselk(ν,x)
besselkdf(ν,x)
第1種
 ハンケル関数
H(1)ν(x) hankelH1(ν,x)
hankelH1df(ν,x)
第2種
 ハンケル関数
H(2)ν(x) hankelH2(ν,x)
hankelH2df(ν,x)
球ベッセル関数
関数名 予約語
f(x)
f '(x)
f-1(0), s=1,2,..
f '-1(0), s=1,2,..
第1種
 球ベッセル関数
jν(x) sphericalbesselj(ν,x)
sphericalbesseljdf(ν,x)
sphericalbesseljzeros(ν,s)
sphericalbesseljdfzeros(ν,s)
第2種
 球ベッセル関数
yν(x) sphericalbessely(ν,x)
sphericalbesselyjdf(ν,x)
sphericalbesselyzeros(ν,s)
sphericalbesselydfzeros(ν,s)
第1種
 変形球ベッセル関数
iν(x) sphericalbesseli(ν,x)
sphericalbesselidf(ν,x)
第2種
 変形球ベッセル関数
kν(x) sphericalbesselk(ν,x)
sphericalbesselkdf(ν,x)
第1種
 球ハンケル関数
h(1)ν(x) sphericalhankelH1(ν,x)
sphericalhankelH1df(ν,x)
第2種
 球ハンケル関数
h(2)ν(x) sphericalhankelH2(ν,x)
sphericalhankelH2df(ν,x)
エアリー関数
関数名 予約語
f(x)
f '(x)
f-1(0), s=1,2,..
f '-1(0), s=1,2,..
エアリー関数 Ai(x) airyai(x)
airyaidf(x)
airyaizeros(s)
airyaidfzeros(s)
エアリー関数 Bi(x) airybi(x)
airybidf(x)
airybizeros(s)
airybidfzeros(s)
ケルビン関数
関数名 予約語
f(x)
f '(x)
第1種ケルビン関数 berν(x) ber(ν,x)
berdf(ν,x)
第1種ケルビン関数 beiν(x) bei(ν,x)
beidf(ν,x)
第2種ケルビン関数 kerν(x) ker(ν,x)
kerdf(ν,x)
第2種ケルビン関数 keiν(x) kei(ν,x)
keidf(ν,x)
第3種ケルビン関数 herν(x) her(ν,x)
herdf(ν,x)
第3種ケルビン関数 heiν(x) hei(ν,x)
heidf(ν,x)

このページの先頭へ

特殊関数

ガンマ関数
関数名 予約語
ガンマ関数 Γ(a) gamma(a)
第1種
 不完全ガンマ関数
γ(a,x) igamma1(a,x)
第2種
 不完全ガンマ関数
Γ(a,x) igamma2(a,x)
gamma(a,x)
第1種
 正規化ガンマ関数
γ(a,x)/Γ(a) gammap(a,x)
第2種
 正規化ガンマ関数
Γ(a,x)/Γ(a) gammaq(a,x)
ログガンマ関数 lnΓ(a) lngamma(a)
ディガンマ関数 Ψ(a) polygamma(a)
ポリガンマ関数 Ψ(n)(a) polygamma(n,a)
2重階乗 x!! x!!
ポッホハンマー関数 (x)n pochhammer(x,n)
ベータ関数
関数名 予約語
ベータ関数 Β(a,b) beta(a,b)
不完全ベータ関数 Ix(a,b) y: ibeta(x,a,b)
x: ibetaix(y,a,b)
不完全ベータ関数 I1-x(a,b) y: ibetac(x,a,b)
x: ibetacix(y,a,b)
誤差関数
関数名 予約語
誤差関数 erf(x) y: erf(x)
x: erfix(y)
誤差補関数 erfc(x) y: erfc(x)
x: erfcix(y)
虚数誤差関数 erfi(x) y: erfi(x)
初等関数積分とフレネル積分
関数名 予約語
指数積分 Ei(x) Ei(x)
指数積分 En(x) Ei(n,x)
対数積分 li(x) li(x)
正弦積分 Si(x) Si(x)
余弦積分 Ci(x) Ci(x)
双曲線正弦積分 Shi(x) Shi(x)
双曲線余弦積分 Chi(x) Chi(x)
フレネル正弦積分 S(x) fresnelS(x)
フレネル余弦積分 C(x) fresnelC(x)
楕円積分と楕円関数
関数名 予約語
第1種完全楕円積分 K(k) ellipticK(k)
第2種完全楕円積分 E(k) ellipticE(k)
第3種完全楕円積分 Π(n,k) ellipticPi(n,k)
第1種不完全楕円積分 F(x,k) ellipticF(x,k)
第2種不完全楕円積分 E(x,k) ellipticE(x,k)
第3種不完全楕円積分 Π(x,n,k) ellipticPi(x,n,k)
エスエヌ関数 sn(u) jacobiSN(u,k)
シーエヌ関数 cn(u) jacobiCN(u,k)
ディーエヌ関数 dn(u) jacobiDN(u,k)
振幅関数 am(u) jacobiAM(u,k)
直交多項式
関数名 予約語
エルミート多項式 Hn(x) hermiteH(n,x)
第1種チェビシェフ多項式 Tn(x) chebyshevT(n,x)
第2種チェビシェフ多項式 Un(x) chebyshevU(n,x)
ルジャンドル多項式 Pn(x) legendreP(n,x)
ルジャンドル陪多項式 Pn(m,x) legendreP(n,m,x)
ラゲール多項式 Ln(x) laguerreL(n,x)
ラゲール陪多項式 Ln(α,x) laguerreL(n,α,x)
ゲーゲンバウアー多項式 Cn(λ,x) gegenbauerC(n,λ,x)
ヤコビ多項式 Pn(α,β,x) jacobiP(n,α,β,x)
その他の特殊関数
関数名 予約語
合流型超幾何関数 1F1(a;b;x) F11(a,b,x)
合流型超幾何関数 U(a;b;x) FU11(a,b,x)
ガウス型超幾何関数 2F1(a,b;c;x) F21(a,b,c,x)
ベルヌーイ数 Bn bernoulli(n)
ゼータ関数 ζ(x) zeta(x)

このページの先頭へ

プログラム

数値計算に特化したC言語ライクな簡易的なプログラム体系です。

実行制御文
予約語 簡易説明
if(条件式){式;...}
elseif(条件式){式;...}
else{式;...}
ifの条件式が真ならそのブロックを実行する
偽ならelseifの条件式で同様の処理を行う
該当ブロックを実行したらif文を終了する
while(条件式){式;...} 条件式が真ならブロックを実行する
これを繰返し条件式が偽になったら終了する
do{式;...}
 while(条件式);
ブロックを無条件に実行する
条件式が真ならば再度ブロックを実行し、
偽ならは終了する
for(変数=初期値;
     条件式;
     変数=変数+ステップ)
     {式;...}
変数を初期化し、条件式が真なら処理を実行する
変数を増分し、再度条件式が真なら処理を繰り返し、条件式が偽になったら終了する
break 無条件でループから抜ける
continue 無条件でループの始めに戻る
表示制御文
予約語 簡易説明
print(式1,式2,...) 式を出力する
println(式1,式2,...) 式を出力して改行する
/*コメント*/ 計算式や制御に関与しない
論理演算子と論理値
分類 予約語 簡易説明
論理演算子

条件式が
 真であれば true
 真でなければ false
を返す
not 優先順位
  not>and>or
and
or
== 左式と右式は等しい =
<> 左式と右式は等しくない ≠
=<,<= 左式は右式と等しいか小さい ≦
=>,>= 左式は右式と等しいか大きい ≧
< 左式は右式より小さい <
> 左式は右式より大きい >
論理値 true true=1(≠0)
false false=0
配列 (array)
予約語 簡易説明
numeric 配列名[要素数];
numeric 配列名[要素数][要素数];
numeric 配列名[要素数][要素数][要素数];
....
配列を宣言する。 numeric test1[4];
numeric test2[4][4];
numeric test3[4][4][4];
numeric 配列名[] = {数値1,数値2,数値3,....};
numeric 配列名[][] = {{....},{....}};
numeric 配列名[][][] =
{{....},{....},{....}};
....
配列を宣言すると同時に初期化する。 numeric test1[] = {1,2,3};
numeric test2[][] = {{1,2,3},{4,5,6}};
kei_length(a) 配列の要素数を取得する。 numeric test[4];
n = kei_length(test);
function 関数名(numeric k[]){...} 関数の引数に配列を指定する。 numeric test[]={0,1,2,3};
func1(test);

function func1(numeric k[])
{ print(k[0]);
.....
}