看板 C_and_CPP 關於我們 聯絡資訊
之前,有版上的朋友執疑, 不同的 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