パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
数値関数
Basicに組み込みの数値関数と、切り上げ、切捨て、四捨五入の仕方、倍数の判定方法など
1 数値関数
関数 | 機能 | 書式 [ ]内は省略可 |
abs | 絶対値を得ます | abs(数式) |
fix | 数値の整数部を得ます。正の数の場合はintと同じ結果になり ますが、負の場合は単に整数部だけを返すので、結果が異なり ます。fix(-3.25) の場合、-3が得られます。 |
fix(数式) |
int | 小数点以下を切り捨てた整数を得ます。数式の値が負の時は、 数式の値を超えない最大の整数を返します。 int(-3.25) の場合、-4が得られます。 |
int(数式) |
sgn | 符号を調べます。数式が正の場合 1 負の場合 -1 0の場合0 を返します。 |
sgn(数式) |
cdbl | 数式の値を倍精度実数に変換します。 | cdbl(数式) |
cint | 数式の値を、整数に変換します。小数点以下は四捨五入します。 | cint(数式) |
csng | 数式の値を単精度実数に変換します。 | csng(数式) |
mod | これは関数ではなく、演算子ですが、剰余の計算をします | 数式 mod 数式 |
atn | アークタンジェントを得ます。 得られる値はラジアンで-π/2〜π/2の範囲です。 |
atn(数式) |
cos | コサインを得ます。数式はラジアンで指定します。 | cos(数式) |
sin | サインを得ます。数式はラジアンで指定します。 | sin(数式) |
tan | タンジェントを得ます。数式はラジアンで指定します。 | tan(数式) |
sqr | 平方根を得ます。 | srr(数式) |
log | 自然対数eを底とした対数を得ます。 | log(数式) |
exp | e(自然対数の底)に対する指数関数の値を得ます。 | exp(数式) |
2 数値関数のちょっとした応用編
(1) 四捨五入、切捨て、切り上げ
四捨五入、切捨て、切り上げの方法。 int, fixを使うと簡単そうですが、漫然と使うと痛い目にあいます。
まず、小数点以下を丸めて整数にする場合から。
小数点以下を四捨五入 cint(x) または int(x+0.5)
小数点以下を切り捨て fix(x)
小数点以下を切り上げ -sgn(x)*int(-abs(x))
切捨ての場合、intを使うと、正の数ではいいが、負の数では切り上げになってしまう点に注意して下さい。
あえてintで切り捨て処理をするなら
if x>=0 then a=int(x) else a=-int(-x) とするか a=sgn(x)*int(abs(x))
となります。
切り上げの場合、以下のような記述もできます。
if x>=0 then a=-int(-x) else a=int(a)
では、小数点第3位を四捨五入、切捨て、切り上げして小数点第2位までに丸める方法ものせておきます。
第3位四捨五入 int(100*x+0.5)/100
第3位切り捨て fix(100*x)/100
第3位切り上げ -sgn(x)*int(-100*abs(x))/100
切り上げがやや、ややこしいですがよく見て理解して下さい。
※注意
なお、数値関数を使わなくても、実数を整数型変数に代入すると、自動的に整数に型変換(オートキャスト)されます。
自動型変換の時は小数点以下は四捨五入されます。
VBAの整数型へのオートキャストにBasicのケースもちょっとだけ書いてますので参考にして下さい。
(2) 倍数の判定
kがnの倍数であるかどうか判定するには、以下のようにします。
if (k mod n) = 0 then
または
if (k-n*int(k/n))=0 then
という方法もあります。
(3) 誘導関数
Basicには通常アークサイン、アークコサインは組み込み関数として用意されていません。また通常Basic
のlogは自然対数で常用対数は用意されていません。しかし、以下のようにそれらを作り出すことができます。
アークサイン arcsin(x)=atn(x/sqr(1-x*x))
アークコサイン arccos(x)=-atn(x/sqr(1-x*x))+1.5708
常用対数 log10(x)=log(x)/log(10)
これらは、def fn で以下のようにユーザー定義関数として使います。
10 def fnarcsin(x)=atn(x/sqr(1-x*x))
20 def fnarccos(x)=-atn(x/sqr(1-x*x))+1.5708
30 def fnlog10(x)=log(x)/log(10)
(4) 乱数をつくる
たとえば1〜6(サイコロの目)の乱数を作る場合は以下のようにします。
int(rnd*6)+1