2022年3月27日
fortran言語での符号付き乱数の発生方法を紹介する。
まず、元になる乱数は、
call random_number(rand1)
で生成しておく。
(-1)^nで考える。
n=0なら (-1)^0=1
n=1なら (-1)^1=-1
となるので、0か1を乱数で生成すれば良い。
乱数の値が0~0.5なら0で
乱数の値が0.5~1なら1とするためには
int(rand1+0.5d0)
とすれば、0か1が一様に発生する。つまり、
(符号)=(-1)**int(rand1+0.5d0)
とすれば良い。
考え方にもよるが、こちらの方が主流かもしれない。
まず、必要な正の区間の2倍の区間で値を生成する。
例えば、-1~1を発生させたいなら、0~2まで生成する。
例えば、-100〜100を発生させたいなら、0〜200まで生成する。
その後、生成した値を半分だけ不側にオフセットすれば良い。
例えば、-1〜1の生成方法は、
(-1から1の値)=rand1*2d0-1d0
となる。
つまり、-n〜nまでなら
(-nからnまでの値)=rand1*2d0-dble(n)
となる。