計算関数の拡張
投稿者: 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乗とかどう使うか想像できません!