オーバーフロー/アンダーフローを 避ける計算アルゴリズムと...

42

Transcript of オーバーフロー/アンダーフローを 避ける計算アルゴリズムと...

Page 1: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数
Page 2: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

・今回は2項確率 の計算への応用

「モグラ算術システム」の応用

x n xnCx p q

・倍精度以上の精度を扱える算術システムの上で動く.計算可能な範囲のすべてに応用可能である.

・離散型確率分布の計算への応用

プログラミング言語(C,C++, JAVA, Visual BASIC,

FORTRANその他),Mathematica, Maple 等で実現可能.

Page 3: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

直接計算による方法

データセットによる方法

近似式による方法

2項係数の計算

(i)

(ii)

(iii)

( , ) ( ) /( ( ) ( ))n x n x n x c0 mfact0 mfact0 mfact0

( , ) ( ) /( ( ) ( ))n x n x n x c1 mfact1 mfact1 mfact1

( , ) ( ) /( ( ) ( ))n x n x n x c2 mfact2 mfact2 mfact2

Page 4: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

x n xp q ベキ乗 の計算

(i) 高速計算による方法

(ii) 対数による方法

( ( ), ( ) , ) ( ( ), ( ) , )M p I p x M q I q n x mpow1 mpow1

( ; , )x n p p1

( 10,0 , ( ), ( ) ( ( ), ( ) )M x I x M p I p mpow mlog10

( ), ( ) ( ( ), ( ) )M n x I n x M q I q mlog10

( ; , )x n p p2

0 1, 1/ 2p p の場合

Page 5: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

1/ 2p の場合

(iii) 高速計算による方法

(iv) 対数による方法

( ,1/ 2) 1,0 / ( 2,0 , )n n p1 mpow1

( ,1/ 2) 1,0 /n p2

( 10,0 , ( ), ( ) ( 2,0 ))M n I n mpow mlog10

Page 6: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

1/ 2p の場合

( ; , ) ( , ) ( ; , )x n p n x x n p b11 c1 p1

( ; , ) ( , ) ( ; , )x n p n x x n p b12 c1 p2

( ; , ) ( , ) ( ; , )x n p n x x n p b21 c2 p1

( ; , ) ( , ) ( ; , )x n p n x x n p b22 c2 p2

Ⅰ:

Ⅱ:

Ⅲ:

Ⅳ:

Page 7: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

の場合

Ⅰ:

Ⅱ:

Ⅲ:

Ⅳ:

1/ 2p

( ; ,1/ 2) ( , ) ( ,1/ 2)x n n x n b11 c1 p1

( ; ,1/ 2) ( , ) ( ,1/ 2)x n n x n b12 c1 p2

( ; ,1/ 2) ( , ) ( ,1/ 2)x n n x n b21 c2 p1

( ; ,1/ 2) ( , ) ( ,1/ 2)x n n x n b22 c2 p2

Page 8: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

2項確率関数

方法Ⅰ,Ⅱ,Ⅲ,Ⅳを比較

・相対誤差 ・計算時間

Page 9: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

2項確率関数 ・ の場合 ・ の場合

1

2p

1

2p

Page 10: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

相対誤差:p=0.2,n=10万

単項確率の相対誤差の比較 n=10万,p=0.2

0.0E+00

5.0E-11

1.0E-10

1.5E-10

2.0E-10

2.5E-1010

000

2000

0

3000

0

4000

0

5000

0

6000

0

7000

0

8000

0

9000

0

x

相対誤差

b11 b12 b21 b22

Page 11: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

相対誤差:p=0.2,n=1千万

単項確率の相対誤差の比較 n=1千万,p=0.2

0.0E+001.0E-082.0E-083.0E-084.0E-085.0E-086.0E-08

1000

000

2000

000

3000

000

4000

000

5000

000

6000

000

7000

000

8000

000

9000

000

x

相対誤差

b11 b12 b21 b22

Page 12: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

計算時間:p=0.2, n=10万

単項確率の計算時間の比較 n=10万,p=0.2

0.00000

0.01000

0.02000

0.03000

0.04000

100

00

200

00

300

00

400

00

500

00

600

00

700

00

800

00

900

00

x

計算時間(sec)

b11 b12 b21 b22

Page 13: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

計算時間:p=0.2,n=1千万

単項確率の計算時間の比較 n=1千万,p=0.2

0.00000

0.00005

0.00010

0.00015

0.00020

1000

000

2000

000

3000

000

4000

000

5000

000

6000

000

7000

000

8000

000

9000

000

x

計算時間(sec)

b11 b12 b21 b22

Page 14: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

相対誤差:p=0.5,n=10万

単項確率の相対誤差の比較 n=10万,p=0.5

0.0E+00

5.0E-11

1.0E-10

1.5E-10

2.0E-10

2.5E-1010

000

2000

0

3000

0

4000

0

5000

0

6000

0

7000

0

8000

0

9000

0

x

相対誤差

b11 b12 b21 b22

Page 15: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

相対誤差:p=0.5,n=1千万

単項確率の相対誤差の比較 n=1千万,p=0.5

0.0E+001.0E-082.0E-083.0E-084.0E-085.0E-086.0E-08

1000

000

2000

000

3000

000

4000

000

5000

000

6000

000

7000

000

8000

000

9000

000

x

相対誤差

b11 b12 b21 b22

Page 16: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

計算時間:p=0.5,n=10万

単項確率の計算時間の比較 n=10万,p=0.5

0.00000

0.01000

0.02000

0.03000

0.04000

100

00

200

00

300

00

400

00

500

00

600

00

700

00

800

00

900

00

x

計算時間(sec)

b11 b12 b21 b22

Page 17: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

計算時間:p=0.5,n=1千万

単項確率の計算時間の比較 n=1千万,p=0.5

0.000000.000050.000100.000150.000200.000250.00030

1000

000

2000

000

3000

000

4000

000

5000

000

6000

000

7000

000

8000

000

9000

000

x

計算時間(sec)

b11 b12 b21 b22

Page 18: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

・ と に共通して

方法Ⅰがよい.

・計算時間はどの方法も大差がない.

の計算結果 ( ; , )b x n p

方法Ⅰを用いる

1/ 2p 1/ 2p

Page 19: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

方法Ⅰ,Ⅱ

0

( ; , ) ( ; , )x

i

B x n p b i n p

の計算

Page 20: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

....

省略

...

Lx x0 1Lx 1x

15( ) 10LP X x

( ; , ) (0; , ) (1; , ) ( ; , )B x n p b n p b n p b x n p

ˆ( ; , ) ( 1; , ) ( ; , )LB x n p b x n p b x n p

Page 21: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

15( ) 10RP X x

nx

....

省略

...

1x Rx1Rx

( ; , ) (0; , ) (1; , ) ( ; , )B x n p b n p b n p b x n p

ˆ( ; , ) 1 ( ( 1; , ) ( 1; , ))RB x n p b x n p b x n p

Page 22: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

を正数とする

2 4

3

1 4( )( ; , ) exp , 1/ 2

2 9

nc ncB nc n p p

n

2 4

3

1 4( )1 ( ; , ) exp , 1/ 2

2 9

nc ncB nc n p p

n

c

改良されたUspenskyの不等式(Kambo&Kotz,1966):

上側限界:

下側限界:

( , )R Rx x n p

( , )L Lx x n p

Page 23: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

Bahadur の不等式: X ( , )B n pは に従う

(i) np x n のとき

( 1)( ) ( ; , )

( 1) ( 1)

x qP X x b x n p

x n p

(ii) 0 x np のとき

( 1 )( ) ( ; , )

( 1)

n x pP X x b x n p

n p x

Page 24: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

2項分布の性質

(i)

(ii)

( ) ( ), / 2 ; 1/ 2P X x P X n x n x n p

( ) ( ), 0 / 2; 1/ 2P X x P X n x x n p

Page 25: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

左側限界の決定:

2

(180log10)

960log103 9 ( )

npqnc

pqn

max{ 1,[ ]}Lx np nc

(i) 改良されたUspenskyによる方法

1/ 2p の場合:

Page 26: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

(ii) Bahadur の不等式による方法:

( 1 )( ) ( ; , ) , 0,1, ,

( 1)

n x pg x b x n p x n

n p x

決定方法

(i) 1np 1

(ii) 15[ ] 1 0, ([ ] 1) 10np g np [ ] 1np

(iii) 15[ ] 2, ([ ] 1) 10np g np 2分法

Page 27: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

初期値: 0 0( , ) (0,[ ] 1)u v np

15( ) 10g x を満たす最大の を x ' ( , )Bl n p

15

15

1, 1,

( , ) [ ] 1, 2, ([ ] 1) 10 ,

' ( , ), 2, ([ ] 1) 10 .

B

B

np

l n p np np g np

l n p np g np

( , ) max{ 1, ( , ),[ ]}L Bx n p l n p np nc

Page 28: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

右側限界の決定: 1/ 2p の場合:

15

15

1, [ ] 1,

( , ) [ ] 1, [ ] 2, ([ ] 1) 10 ,

' ( , ), [ ] 2, ([ ] 1) 10 ,

B

B

n n np

r n p np n np g np

r n p n np g np

( , ) min{ 1, ,[ ]}R Bx n p n r nq nc

1/ 2p の場合:

( , ) ( , ), ( , ) ( , )L R R Lx n p x n q x n p x n q

Page 29: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

とおく

( ; , )B x n p の計算法:方法Ⅰ

の場合に の近似値

( ; , ) (0; , ) (1; , ) ( ; , )B x n p b n p b n p b x n p

0 [( 1) ]x n p ( ; , )B x n p

ˆ( ; , ) 0B x n p

[( 1) ], ( , )L Lm n p x x n p

ˆ( ; , )B x n p

(i) 0 Lx x

(ii) Lx x m かつ Lx x n x のとき

1, 1, ,i

n i pi n

i q

確率関数の値の小さい方から加える

Page 30: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

2 2 3ˆ( ; , ) ( 1; , )(1

L L LL x x xB x n p b x n p

2 3L Lx x x

モグラたたき法による計算

1 1 1,0L Lx x z w

( ), ( ) / ( ), ( ) M p I p M q I q w

( ( ), ( ) ( ( ), ( ) 1,0 )) / ( ), ( ) )i M n I n M i I i M i I i w

1 ,i w w

1 , 2, ,i i i Li x x z z w

Page 31: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

(iii) Lx x m かつ Ln x x x のとき

( , )R Rx x n p を計算

(a) 1Rm x の場合:

1, 0,1, , 1i

i qi n

n i p

とおく

1 2 2 3 2 3 1( 1; , )(1 )x x x x x mB b x n p

2 2 2 3 2 3( 1; , )(1 )R R R R RR x x x x x mB b x n p

1 2ˆ( ; , ) 1 ( )B x n p B B

Page 32: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

(b)

( c)

1Rx x m の場合:

2 2 3ˆ( ; , ) 1 ( 1; , )(1

L L Lx x xB x n p b x n p

2 3 1)L L Rx x x

1Rx x の場合: ˆ( ; , ) 1B x n p

[( 1) ]n p x についてはつぎのようにする

ˆ ˆ( ; , ) 1 ( 1; , )B x n p B n x n q

残りの

Page 33: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

方法Ⅰと同様な手順で

( ; , )B x n p の計算法:方法Ⅱ

確率関数の大きい方から加える

ˆ( ; , )B x n p を決定する

Page 34: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

:方法ⅠⅡの比較

・結果の精度

・計算時間

( ; , )B x n p

Page 35: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

確率分布関数

の計算精度の比較(n=1千万)

n p 項数1千万 0.1 x=[ 992473 1000000 ] 7528 9 桁 9 桁1千万 0.2 x=[ 1989959 2000000 ] 10042 9 桁 9 桁1千万 0.3 x=[ 2988493 3000000 ] 11508 11 桁 11 桁1千万 0.4 x=[ 3987696 4000000 ] 12305 9 桁 9 桁1千万 0.5 x=[ 4987441 5000000 ] 12560 10 桁 10 桁1千万 0.6 x=[ 5987692 6000000 ] 12309 10 桁 10 桁1千万 0.7 x=[ 6988485 7000000 ] 11516 9 桁 9 桁1千万 0.8 x=[ 7989946 8000000 ] 10055 9 桁 9 桁1千万 0.9 x=[ 8992456 9000000 ] 7545 9 桁 9 桁

計算省略後 精度 精度

方法Ⅰ 方法Ⅱ

Page 36: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

確率分布関数

の計算時間の比較(n=1千万)

n=1千万

0.0000

0.1000

0.2000

0.3000

0.4000

0.5000

0.6000

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

pの値

計算時間(sec)

方法Ⅰ

方法Ⅱ

Page 37: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

確率分布関数

の計算精度の比較(n=1億)

n p求める区間 項数1億 0.1 x=[ 9976179 10000000 ] 23822 8 桁 8 桁1億 0.2 x=[ 19968233 20000000 ] 31768 8 桁 8 桁1億 0.3 x=[ 29963604 30000000 ] 36397 9 桁 9 桁1億 0.4 x=[ 39961088 40000000 ] 38913 8 桁 8 桁1億 0.5 x=[ 49960284 50000000 ] 39717 9 桁 9 桁1億 0.6 x=[ 59961084 60000000 ] 38917 8 桁 8 桁1億 0.7 x=[ 69963595 70000000 ] 36406 8 桁 8 桁1億 0.8 x=[ 79968221 80000000 ] 31780 8 桁 8 桁1億 0.9 x=[ 89976162 90000000 ] 23839 8 桁 8 桁

方法Ⅰ 方法Ⅱ

計算省略後 精度 精度

Page 38: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

確率分布関数

の計算時間の比較(n=1億)

n=1億の場合

0.00000.20000.40000.60000.8000

1.00001.20001.40001.6000

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

pの値

計算時間(sec)

方法Ⅰ

方法Ⅱ

Page 39: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

確率分布関数

の計算精度の比較(n=1億)

n p 項数1億 4/10^7 x=[ 2 40 ] 39 8 桁 8 桁1億 5/10^7 x=[ 6 50 ] 45 8 桁 8 桁1億 6/10^7 x=[ 10 60 ] 51 7 桁 7 桁1億 7/10^7 x=[ 15 70 ] 56 8 桁 8 桁

精度

方法Ⅰ 方法Ⅱ

計算省略後 精度

Page 40: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

確率分布関数

の計算時間の比較(n=1億)

n=1億

0.00000.00010.00020.00030.00040.00050.00060.0007

4/10^7 5/10^7 6/10^7 7/10^7

pの値

計算時間(sec)

方法Ⅰ

方法Ⅱ

Page 41: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

・計算精度にはあまり差がない.

・計算時間は方法Ⅰがやや短い.

の計算結果

方法Ⅰを採用する

( ; , )B x n p

Page 42: オーバーフロー/アンダーフローを 避ける計算アルゴリズムと ...qdca1385/stat2012/PPT_BinomProb/...b22 c2 p2( ; ,1/2) ( , ) ( ,1/2)x n n x n 2項確率関数

以上です.