ある乱数生成法により,生成した最初の乱数の値は固定するか確かめて頂きたいです.
0.0から1.0までの一様乱数を発生させる方法です.
C言語のコードは以下に載せます.
#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define MASK 123459876
float ran0(long *idum)
{
long k;
float ans;
*idum ^= MASK;
k=(*idum)/IQ;
*idum=IA*(*idum-k*IQ)-IR*k;
if (*idum < 0) *idum += IM;
ans=AM*(*idum);
*idum ^= MASK;
return ans;
}
この乱数生成法をBVAで,計算の中で繰り返し用いようとしています.
idumを任意の整数値に設定・再設定すれば乱数列が初期化されると書いてあったため,idumの値を変えてみましたが,生成された乱数の最初の値は固定されたままでした.
そこで,もともとこの乱数生成法がそのようになっているのかを教えて頂きたいです.
よろしくお願いします.
No.2ベストアンサー
- 回答日時:
Cの関数ran0の中の最初の
*idum ^= MASK;
で、関数の外で設定されたidumの値を使って
MASKとの間でビット毎に排他的論理和を取って
います。当然、外で与えるidumの値が変われば
乱数の最初の値は変わります。
実際、メイン関数を作って、この関数をコンパイル
して、実行してみましたが、そのように動いて
います。
idumの値を変えても、乱数の初期値が変わらない
とすれば、関数ran0の呼び方を間違えていると
思います。
ran0の引数はポインタであることを意識していますか?
なお、Cの標準関数の中にも乱数発生関数randがあります。
これは、関数srandで初期化すれば、初期値を固定
できます。逆にいえば、普通は、randの初期値は
固定されません。
VBAにも乱数発生関数が組み込まれていると思いますが、
これらを使わない理由が何かあるのでしょうか。
乱数の統計的性質が余りよくないのは確かですが、
あなたのran0も同程度でしょう。
もっと性質のよい乱数発生アルゴリズムがあるはず
ですので、ご調査ください。
回答ありがとうございます.
丁寧な説明でわかりやすかったです.見直して行ってみたところ,解決することができました.
本当にありがとうございました.
No.1
- 回答日時:
BVAというのが何の事だか分りませんが,C言語で書かれたプログラムで生成される最初の乱数の値は固定なんてことはありませんよ。
どういう使い方をしているのかな?
回答ありがとうございます.
BVAはExcelのVisual Basic for Applicationsのことです.
使い方はそのまま書いていますが,idumを0に設定しないならば,関数中の^演算のある2行は消してもよいと書かれていたため,その2行は消して行いました.また,消さない場合でも生成された最初の乱数は固定されたままでした.
回答によれば固定されることはないということなので,間違っているところがあると思うので見直してみます.
迅速な回答をありがとうございます.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 Excelによるサンプルの拡大について 6 2023/08/22 16:03
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) Arduino UNO のC言語 2 2023/04/18 19:42
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- 数学 既存の数列のランダム性について(初歩的質問) 2 2022/06/07 20:04
- 統計学 風速を1秒刻みで推定する方法 6 2023/03/03 11:58
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
1日前の検尿
-
今朝、毎朝の習慣でオナニーし...
-
変な話しになります。尿検査で...
-
射精をして1週間以内に尿検査を...
-
検便についてです。 便は取れた...
-
腕を見たら黄色くなってる部分...
-
2つの数値のうち、数値が小さい...
-
彼女のことが好きすぎて彼女の...
-
EXCELで条件付き書式で空白セル...
-
口の中に黒い血の塊
-
値が入っているときだけ計算結...
-
男です。昨日の午後3時くらいに...
-
白血球が多いとどんな心配があ...
-
Excelで""で囲む方法
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
中出しをするとお腹が痛い・・・。
-
麻疹風疹の抗体検査結果につい...
-
エクセルでエラーが出て困って...
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
至急!尿検査前日にオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
精子が黄色?
-
小数点以下を繰り上げたものを...
-
値が入っているときだけ計算結...
-
口の中に黒い血の塊
-
健否~書類の書き方~
-
甲状腺が腫れているが血液検査...
-
はしかの抗体検査は何科の病院...
-
テスターで断線を調べる方法教...
おすすめ情報