ホーム ] PC技術/システム技術 ] VB.NETプログラミング ] なるほどナレッジ ] インフォメーション ]

上へ

高速化手法

級数演算

最終更新日:2006/12/14  新規

●概要 

 標準的な級数の型における演算について解説する。

Linear Xk / k

○演算内容

 黒が直前の値。赤は追加される演算アイテム。

k 演算
1 X / 1
2 XX / 2
3 X2X / 3

○演算カーネル

SX = 1      Xk
SM = 0     
総和

k = 1 To ??????
   SX = SX * X
   SM = SM + SX / k
Loop

○演算種

 k Baseと仮定する。Numは多倍長。

演算 XBase未満 XNum
MulI 1  
Mul   1
DivI 1 1
Add 1 1

LinearOdd X2k+1 / (2k + 1)

○演算内容

 黒が直前の値。赤は追加される演算アイテム。

k 演算
0 X / 1
1 XXX / 3
2 X3XX / 5

○演算カーネル

XX = XX
SX = X     
X2k+1
SM = X     
総和

k = 1 To ??????
   SX = SX * XX
   SM = SM + SX / (2k + 1)
Loop

○演算種

 k Baseと仮定する。

演算 XBase未満 XNum
MulI 1  
Mul   1
DivI 1 1
Add 1 1

Factorial  Xk / k!

○演算内容

 黒が直前の値。

k 演算
0 1
1 X / 1
2 XX / 1・2
3 X2X / 1・2・3

○演算カーネル

SX = 1      Xk/ k!
SM = 0     
総和

k = 1 To ??????
   SX = SX * X
   SX = SX / k
   SM = SM + SX
Loop

○演算種

 k Baseと仮定する。

演算 XBase未満 XNum
MulI 1  
Mul   1
DivI 1 1
Add 1 1

FactorialEven X2k / (2k)!

○演算内容

 黒が直前の値。

k 演算
0 1
1 XX / 12
2 X2XX / 1234
3 X4XX / 123456

○演算カーネル

SX = 1      X2k / (2k)!
SM = 0     
総和
XX = X
X

k = 1 To ??????
   SX = SX * XX
   SX = SX / ((2k
1)2k)
SM = SM + SX
Loop  

・カーネルの高速化

2k Sqrt(Base) の場合は、SX = SX / ((2k 1)2k) は、以下のように二回に分ける。

SX = SX / (2k 1)
SX = SX / 2k

多倍長の除算1回より、DivI (多倍長/Base) 2回の方が圧倒的に早いからである。

○演算種

演算 XXBase未満 XNum
MulI 1  
Mul   1
DivI 1 or 2 1 or 2
Add 1 1

FactorialOdd  X2k+1 / (2k + 1)!

○演算内容

 黒が直前の値。

k 演算
0 X
1 X・XX / 12・3
2 X3XX / 12345
3 X5XX / 1234567

○演算カーネル

SX = X      X2k+1 / (2k + 1)!
SM = X     
総和
XX = X
X

k = 1 To ??????
   SX = SX * XX
   SX = SX / (2k
(2k + 1))
   SM = SM + SX
Loop  

・カーネルの高速化

(2k + 1) Sqrt(Base) の場合は、SX = SX / (2k(2k + 1)) は、以下のように二回に分ける。

SX = SX / 2k
SX = SX / (2k + 1)

多倍長の除算1回より、DivI (多倍長/Base) 2回の方が圧倒的に早いからである。

○演算種

演算 XXBase未満 XNum
MulI 1  
Mul   1
DivI 1 or 2 1 or 2
Add 1 1

FactorialDoubleEven  (2k-1)!!/((2k)!!(2k))X-(2k)

○演算内容

 黒が直前の値。緑はその項にだけ適用される数。

k 演算
1  (1 / 22) / XX
2 (13 / 244)/ X2XX
3 (135 / 2466)/ X4XX

○演算カーネル

  XX = XX
  SX = 1
  SM = 0

  k = 1 To ????
     SX = SX
(2k 1)
     SX = SX / 2k
     SX = SX / XX
     SM = SM + SX / 2k
  Loop

○演算種

演算 XXBase未満 XNum
  2k Base 2k Base 2k Base 2k Base
MulI 1      
Mul   1 1 1
DivI 3 1 2  
Div   2 1 3
Add 1 1 1 1

FactorialDoubleOdd  (2k-1)!!/((2k)!!(2k + 1))X(2k+1)

○演算内容

 黒が直前の値。緑はその項にだけ適用される数。

k 演算
0 X
1 (1 / 23)XXX
2 (13 / 245)X3XX
3 (135 / 2467)X5XX

○演算カーネル

  XX = XX
  SX = X
  SM = X

  k = 1 To ????
     SX = SX
(2k - 1)
     SX = SX / 2k
     SX = SX
XX
     SM = SM + SX / (2k + 1)
  Loop

○演算種

演算 XXBase未満 XNum
  (2k + 1) Base (2k + 1) Base (2k + 1) Base (2k + 1) Base
MulI 2 1 1  
Mul   1 1 2
DivI 2   2  
Div   2   2
Add 1 1 1 1