パソコン活用研究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

TOP PAGE >Basic活用研究目次