変数 CharからIntegerへの変換とスピードアップ
Posted: 2010年4月25日(日) 07:56
変数の型を最適化してスピードアップを図りたいと思っています。
現在は、Integer型を使用していますが、変数の置き換え、計算等を数多くするので、Char型が有利であろうと考えました。
しかし、一部の計算でChar型を超えてしまう計算が含まれているので、その箇所をIntegerに変換しながら計算する手法としてみました。
しかし、その「変換しながら」にコストがかかってしまい、本末転倒と言いますか、今ひとつの結果になってしまいました。
以下のサンプルで、「*TEST01-00」がInteger同士の計算
「*TEST01-02」がChar型からIntegerへ変換しながらの計算です。
もっと、効率的(スピード的に有利な)方法が、あったらご教授いただければと存じます。
宜しくお願いいたします。
現在は、Integer型を使用していますが、変数の置き換え、計算等を数多くするので、Char型が有利であろうと考えました。
しかし、一部の計算でChar型を超えてしまう計算が含まれているので、その箇所をIntegerに変換しながら計算する手法としてみました。
しかし、その「変換しながら」にコストがかかってしまい、本末転倒と言いますか、今ひとつの結果になってしまいました。
以下のサンプルで、「*TEST01-00」がInteger同士の計算
「*TEST01-02」がChar型からIntegerへ変換しながらの計算です。
もっと、効率的(スピード的に有利な)方法が、あったらご教授いただければと存じます。
宜しくお願いいたします。
コード: 全て選択
#N88BASIC
Dim P%[9,9,59] AS Integer
Dim R%[9,9,59] AS Char
Dim TA1% AS Integer
Dim X AS Char
Dim Y AS Char
Dim I$ AS STRING
Dim dwStart AS int64
Dim dwEnd AS int64
Dim TIMECOUNT AS int64
Dim CT AS Int64
Dim CT2 AS Int64
Dim N AS Char
N=1
Randomize
FOR X=1 TO 8
FOR Y=1 TO 8
P%(X,Y,N)=Int(Rnd()*3)
R%(X,Y,N)=P%(X,Y,N) AS Char
NEXT
NEXT
PRINT "計算スピードテスト"
CT2=20000000
Print
Print "Integer(通常)"
dwStart = GetTickCount()
FOR CT=0 TO CT2:GOSUB *TEST01-00:NEXT
PRINT TA1%
GOSUB *TIMEPRINT
Print "Char(Integerへ変換しながら計算)"
dwStart = GetTickCount()
FOR CT=0 TO CT2:GOSUB *TEST01-02:NEXT
PRINT TA1%
GOSUB *TIMEPRINT
I$=Input$(1)
END
*TIMEPRINT
dwEnd = GetTickCount()
TIMECOUNT=(dwEnd-dwStart)/100
PRINT TIMECOUNT/10;"秒"
RETURN
*TEST01-00
TA1%=P%[1,1,N]+P%[1,2,N]*3+P%[1,3,N]*9+P%[1,4,N]*27+P%[1,5,N]*81+P%[1,6,N]*243+P%[1,7,N]*729+P%[1,8,N]*2187
RETURN
*TEST01-01 '遅いのでボツ
TA1%=(((((((P%[1,8,N]*3+P%[1,7,N])*3+P%[1,6,N])*3+P%[1,5,N])*3+P%[1,4,N])*3+P%[1,3,N])*3+P%[1,2,N])*3+P%[1,1,N])
*TEST01-02
TA1%=R%[1,1,N] AS Integer+R%[1,2,N] AS Integer*3+R%[1,3,N] AS Integer*9+R%[1,4,N] AS Integer*27+R%[1,5,N] AS Integer*81+R%[1,6,N] AS Integer*243+R%[1,7,N] AS Integer*729+R%[1,8,N] AS Integer*2187
RETURN
[/quote]