XORSHIFT

 投稿者:匿名希望  投稿日:2010年 7月27日(火)11時48分9秒
  乱数生成アルゴリズムにXORSHIFTというのがあるそうですが
これを十進BASICで実装すればどのようなプログラムになるのでしょうか。
ご多忙の折、恐縮ですがよろしければ教えてください。
 
 

Re: XORSHIFT

 投稿者:山中和義  投稿日:2010年 7月27日(火)12時59分30秒
  > No.1324[元記事へ]

匿名希望さんへのお返事です。

> 乱数生成アルゴリズムにXORSHIFTというのがあるそうですが
> これを十進BASICで実装すればどのようなプログラムになるのでしょうか。

XOR、SHIFTを実装すれば、C言語などのソースが移植できます。
!Xorshift疑似乱数生成法

LET x=123456789
LET y=362436069
LET z=521288629
LET w=88675123

FOR i=1 TO 100 !100 個の乱数
   LET t=bitwiseXOR(x,x*(2^11)) !t=x^(x<<11)
   LET x=y !x=y; y=z; z=w;
   LET y=z
   LET z=w
   LET w=bitwiseXOR( bitwiseXOR(w,IP(w/(2^19))), bitwiseXOR(t,IP(t/(2^8))) ) !w=(w^(w>>19))^(t^(t>>8))

   PRINT w
NEXT i


END


EXTERNAL FUNCTION bitwiseXOR(a,b)
DECLARE NUMERIC aa, bb
DECLARE NUMERIC i,c
LET c=0
FOR i=0 TO 31
   LET aa=MOD(a,2)
   LET a=(a-aa)/2
   LET bb=MOD(b,2)
   LET b=(b-bb)/2
   LET c=c+MOD(aa+bb,2)*2^i
NEXT i
IF c>=2^31 THEN LET c=c-2^32
LET bitwiseXOR=c
END FUNCTION
 

Re: XORSHIFT

 投稿者:白石 和夫  投稿日:2010年 7月27日(火)13時18分18秒
  > No.1324[元記事へ]

Wikipediaによると,排他的論理和とビットシフトの演算のみで記述されるアルゴリズムだとのことです。
ビットシフトは,a*2^n あるいは,INT(a/2^n)で代用できます。
排他的論理和はかなり面倒ですが,
CやJavaで書かれた数値計算アルゴリズムの移植
の補足4のようにすれば実現可能です。
ただし,どちらもCPUの命令を直接利用した計算ではないので高速にはなりません。
実用が目的であれば,CかPascal,あるいはアセンブラを用いてDLLを作成し,それを呼び出す形にするのが合理的です。(ただし,Windows版のみ)
 

XORSHIFT

 投稿者:匿名希望  投稿日:2010年 7月27日(火)14時34分44秒
  早速のご回答ありがとうございました。
ご多忙の折、お手数をおかけしました。
 

戻る