作者sjgau (sjgau)
看板C_and_CPP
標題[心得] Dev-C++ 和 VC6 採用相同的 亂數產生器
時間Tue Aug 24 06:15:40 2010
之前,有版上的朋友執疑,
不同的 compiler 系統,以下的程式
可能會產生不同的結果。
剛剛測試了一下,Dev-C++ 和 VC6 所產生的結果
一模一樣
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// ----------------------------------------------
// swap_int( &a[j], &a[k]);
void swap_int(int *a, int *b)
{
int temp;
temp= *a;
*a= *b;
*b= temp;
}// end of swap_int()
// ----------------------------------------------
int main()
{
int no= 4500, a[5000], i, j, k;
srand(30273);
for (i=0;i<no;i++) {
a[i]= rand();
}
for (i=0;i<no;i++) {
for (j=0;j<(no-1);j++) {
k= j + 1;
// we hope: a[j] <= a[k]
if (a[j] > a[k]) {
swap_int(&a[j], &a[k]);
}
}
}
printf("\n Done! a[10]= %d\n", a[10]);
for (i=0;i<=10;i++) {
printf("i= %5d, a[i]= %6d\n", i, a[i]);
}
system("pause");
return 0;
}
#if 0
Done! a[10]= 93
i= 0, a[i]= 20
i= 1, a[i]= 31
i= 2, a[i]= 35
i= 3, a[i]= 43
i= 4, a[i]= 50
i= 5, a[i]= 56
i= 6, a[i]= 64
i= 7, a[i]= 68
i= 8, a[i]= 71
i= 9, a[i]= 93
i= 10, a[i]= 93
請按任意鍵繼續 . . .
#endif
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.231.73.138
推 LPH66:也許因為用的是同一份 MSVCRT.dll 的關係吧... 08/24 06:25
推 suhorng:推樓上 08/24 07:35
→ WPC001:可以去trace一下各自的rng是否相同(應該都是LCG吧) 08/24 22:52
→ WPC001:為了效能, 所選的m,a,b可能也一樣吧(m就直接是2^32) 08/24 22:53
→ WPC001:如果要很亂, 建議改用boost random number library 08/24 22:54
→ WPC001:甚至是hardware的rng 08/24 22:54