###前提・実現したいこと
現在Visual basicのプログラムをC言語に書き換えています
そこでRandomizeの関数がでてくるのですが、これをどのように書き換えればいいのかわかりません
自分なりにプログラムを作りましたが、同じような値が出力されません
特にわからない箇所が
Randomize4の意味は毎回同じシートを使って乱数を指定しているので乱数の出方のパターンは同じということですか?
また、Rnd1とRnd2に代入される乱数は同じ値ですか?
最終的にはこの部分と同じプログラムをC言語で書きたいです
なので書き換えの部分で変な箇所があればどのように直すのか教えていただきたいです
Visual basic
以下はプログラムの途中部分です
Randomize 4
PI = 4 * Atn(1)
For i = 1 To N / 2 - 1
For j = 1 To N / 2 - 1
If i <> 0 Or j <> 0 Then kx = i / (region) ky = j / (region) K = Sqr(kx ^ 2 + ky ^ 2) Rnd1 = Rnd Rnd2 = Rnd gauss = Abs(Sqr(-2 * Log(Rnd1)) * Cos(2 * PI * Rnd2)) '**************************** 'gaussの上限,下限 (04.6.20) If gauss < 0.001 Then gauss = 0.001 ElseIf gauss > 10 Then gauss = 10 End If '**************************** Spec = ParaA1 * (K ^ (-ParaB1)) Spec2 = Spec * (gauss ^ flag) rad = Sqr(Spec2 * 0.25) If Sqr(kx ^ 2 + ky ^ 2) >= lim Then phase = PI / 2 Else phase = 2 * PI * Rnd End If A(i, j) = rad * Cos(phase) B(i, j) = rad * Sin(phase) A(N - i - 1, N - j - 1) = rad * Cos(phase) B(N - i - 1, N - j - 1) = rad * Sin(phase) A(i, N - j - 1) = rad * Cos(phase) B(i, N - j - 1) = rad * Sin(phase) A(N - i - 1, j) = rad * Cos(phase) B(N - i - 1, j) = rad * Sin(phase) End If
以下C言語の書き換えです
visual basicでRnd1,Rnd2に代入される乱数が同じとして作ってみました
srand(3);
pi=4atan(1)
rnd = (double)rand()/RAND_MAX;
for(i = 0;i <= n/2-1;i++){
for(j = 0;j <= n/2-1;j++){
kx = i/region;
ky = j/region;
k = sqrt(kxkx + ky*ky);
gauss = fabs( sqrt(-2 * log(rnd)) * cos(2 * pi * rnd) );
/gaussの上限,下限 (04.6.20)/
if(gauss < 0.001){
gauss = 0.001;
}else{
if(gauss > 10){
gauss = 10;
}
}
if(k == 0){ spec = 1000; }else{ spec = paraa1 * pow(k,-parab1); } spec2 = spec * pow(gauss,flag); rad = sqrt(spec2 * 0.25); if(sqrt(kx*kx + ky*ky) >= lim){ phase = pi / 2; }else{ phase = 2 * pi * rnd; } a[i][j] = rad * cos(phase); b[i][j] = rad * sin(phase); a[n-i-1][n-j-1] = rad * cos(phase); b[n-i-1][n-j-1] = rad * sin(phase); a[i][n-j-1] = rad * cos(phase); b[i][n-j-1] = rad * sin(phase); a[n-i-1][j] = rad * cos(phase); b[n-i-1][j] = rad * sin(phase); }
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/05/27 12:52
2016/05/27 12:55
退会済みユーザー
2016/05/27 13:10 編集
2016/05/27 13:15
退会済みユーザー
2016/05/27 13:41
2016/05/27 13:48
退会済みユーザー
2016/05/27 14:02
2016/05/27 14:15
退会済みユーザー
2016/05/27 14:24
2016/05/27 14:31
退会済みユーザー
2016/05/27 14:54
2016/05/27 15:04
退会済みユーザー
2016/05/28 15:12