計算関数の拡張
投稿者:
cfm_
投稿日:2016/09/05 19:48
基本的な計算の関数です。2.3乗のような計算もできるようになりました。
参考になったサイト:d.hatena.ne.jp/arakik10/20141202/p1, d.hatena.ne.jp/kazu-yamamoto/20090223/1235372875
関数一覧
使用例
関数のスクリプト(これを貼り付けてください)
ツイート
参考になったサイト:d.hatena.ne.jp/arakik10/20141202/p1, d.hatena.ne.jp/kazu-yamamoto/20090223/1235372875
関数一覧
#xのn乗 (xは全ての実数, nは0以上の整数) # なお、nが小数のときは、nを分数(a/b)にしてroot(pow(x,a),b) # nがマイナスのときは、1/pow(x,-n) で求められます pow(x,n) # xのn乗根を求める (xは全ての実数,nは0以上の整数) root(x,n) #四捨五入 round(n) #切り上げ ceil(n) #四捨五入 桁数指定 (f=0で小数第1位を切り捨て, f=1で小数第2位を切り捨て, ...) round2(n,f) #切り上げ 桁数指定 ceil2(n,f) #切り捨て 桁数指定 floor2(n,f) #絶対値 abs(n) # nの自然対数 (nは全ての実数) ln(n) #最大値 max(n,m) #最小値 min(n,m) #数値をmin~maxに収める clamp(n,min,max) #ラジアンを度に変換 radToDeg(n) #度をラジアンに変換 degToRad(n) #min~maxの整数の乱数を生成 randInt(min,max) #min~maxの乱数を生成 randFloat(min,max) #数値numを文字chでn文字に埋める (例 (135,"0",5)="00135", (-135,"*",5)="-**135",(135,"0",2)="135", (135,"ab",5)="abab135" paddingNumber(num,ch,n)
使用例
pow(2.5,8) # 2.5 ^ 8 = 1525.87890625 root(529,7) # 529 ^ (1 / 7) = 2.4494303572199545 root(pow(513,2),7) # 513 ^ (2 / 7) = 5.947291796943131 round(10.4) # round(10.4) = 10 ceil(10.4) # ceil(10.4) = 11 round2(10.4055,3) # round2(10.4055, 3) = 10.406 ceil2(10.4055,3) # ceil2(10.4055, 3) = 10.406 floor2(10.4055,3) # floor2(10.4055, 3) = 10.405 abs(-32.1) # |-32.1| = 32.1 ln(12.34) # log_e ^ 12.34 = 2.5128460184767505 max(10,20) # max(10, 20) = 20 min(-10.2,-10.1) # min(-10.2, -10.1) = -10.2 clamp(5,12,60) # clamp(5, 12, 60) = 12 radToDeg(0.52359877) # radToDeg(0.52359877) = 29.999999679241103 degToRad(215) # degToRad(215) = 3.7524578917878086 randInt(2,6) # randInt(2, 6) = 2 randFloat(2,6) # randFloat(2, 6) = 4.912605756157733 paddingNumber(315,"0", 6) # paddingNumber(315, "0", 6) = 000315
関数のスクリプト(これを貼り付けてください)
#計算関数用の初期化
def initMath()
setVariable("MATH_E",2.718281828459045)
setVariable("MATH_PI",3.141592653589793)
setVariable("MATH_POW10",createArray())
a=getVariable("MATH_POW10")
y=1
n=0
while n<309
a[n]=y
y=y*10
n=n+1
end
end
initMath()
#xのn乗を計算(xは全ての実数, nは0以上の整数)
# なお、nが小数のときは、nを分数(a/b)にしてroot(pow(x,a),b)
# nがマイナスのときは、1/pow(x,-n) で求められます
def pow(x,n)
if n<1
return 1
end
y=1
while n>1
if (n%2)==1
y=y*x
x=x*x
n=(n-1)/2
else
x=x*x
n=n/2
end
end
return y*x
end
# xのn乗根を求める(xは全ての実数,nは0以上の整数) 例)root(3,70)=1.01581826615963
def root(x,n)
q=0.0000000001
r=x
while true
p=r
r=((n-1)*r)/n+x/(n*pow(r,n-1))
if (p-r)/r<=q
return r
end
end
end
#四捨五入
def round(n)
return floor(n+0.5)
end
#切り上げ
def ceil(n)
return -floor(-n)
end
#四捨五入 桁数指定
def round2(n,f)
b=getVariable("MATH_POW10")[f]
return floor(n*b+0.5)/b
end
#切り上げ 桁数指定
def ceil2(n,f)
b=getVariable("MATH_POW10")[f]
return -floor(-n*b)/b
end
#切り捨て 桁数指定
def floor2(n,f)
b=getVariable("MATH_POW10")[f]
return floor(n*b)/b
end
#絶対値
def abs(n)
if n<0
return -n
else
return n
end
end
#E^num (numは整数)
def exp(num)
return pow(2.718281828459045,num)
end
# 1近傍でlnの精度の良い級数展開の結果を返す
def lnNearOne(x)
X=(x-1)/(x+1)
sum=0
i=0
while i<=10
sum=sum+2*(1/(2*i+1))*pow(X,2*i+1)
i=i+1
end
return sum
end
# nの自然対数 (nは全ての実数) (例 ln(3.5)=1.2527629684951374, ln(10)=2.3025850929939726
# Ref: oshiete1.goo.ne.jp/qa1880549.html
def ln(n)
i=0
while abs(n-1)>=1
n=sqrt(n)
i=i+1
end
return pow(2,i)*lnNearOne(n)
end
#最大値
def max(n,m)
if n>m
return n
else
return m
end
end
#最小値
def min(n,m)
if n>m
return m
else
return n
end
end
#数値をmin~maxに収める
def clamp(n,min,max)
if n<min
return min
elsif max<n
return max
else
return n
end
end
#ラジアンを度に変換
def radToDeg(n)
return n*57.29577951308232
end
#度をラジアンに変換
def degToRad(n)
return n*0.017453292519943296
end
#min~maxの整数の乱数を生成
def randInt(min,max)
return floor(rand()*(max-min+1))+min
end
#min~maxの乱数を生成
def randFloat(min,max)
return rand()*(max-min)+min
end
#数値の文字埋め (例 (135,"0",5)="00135", (-135,"*",5)="-**135",(135,"0",2)="135", (135,"ab",5)="abab135"
def paddingNumber(num,ch,n)
if num<0
s=toString(-num)
n=n-getArrayLength(splitString(s,""))
while n>0
s=ch+s
n=n-1
end
return "-"+s
else
s=toString(num)
n=n-getArrayLength(splitString(s,""))
while n>0
s=ch+s
n=n-1
end
return s
end
end
コメントする
コメントするには、ログインする必要があります。
3とかで代用したりしてしまうのでこのまとめは有り難くブクマはべり候です
2.3乗とかどう使うか想像できません!