看板 C_and_CPP 關於我們 聯絡資訊
主要是綠色那一段,照理來講,for(i=1;i<300;i++)應該執行300次 然後printf 300次,如果說是程式碼寫錯,至少也應該會印一次才對 可是執行結果,一次也沒顯示..... 是哪裡有問題呢?? 有板友願意幫看程式其他錯誤,我順道把公式寫上來好了,感謝=v=" ┌X[i,1] ┐ ┌ b*X[i-1,k]┐ │X[i,2] │ │X[i-1,1] + b*X[i-1,k]│ │X[i,3] │ │X[i-1,2] + b*X[i-1,k]│ │.... │=│ .................. │ │X[i,k-1]│ │X[i-1,k-2] + b*X[i-1,k]│ │X[i,k] │ │X[i-1,k-1] + b*X[i-1,k]│ └ ┘ └ ┘ 第一組[i-1]共97個數 第二組[i]的97個數要產生時,需利用第一組的數 X[前一組的數,前一組第幾個數] 這樣的公式需從後面往前算(因為計算第j個數,需利用第j-1個數來計算) 程式計算結果,從第303個之後的數180個0,但這是不可能發生的 只有當97個數全是0時,才會出現後面全0的狀態,但也就只有全0才會產出全0的狀況 這組公式中絕不可能出現這種狀況 不知道程式的錯誤在哪~.~ =========================================================== typedef unsigned long long b64; #define DMOD(n,p)((n)%(p)) int main(void) { int i,mci; int p=2147482621; int b=1048148; int k=97; b64 tseed,seed[97]; seed[1] = 135792468; for(i=2;i<=k;i++){ seed[i] = DMOD(1073741816 * seed[i-1],p); } for(i=1;i<300;i++){ if(++mci==k+1){ tseed=DMOD(b*seed[k],p); for(j=k;j>1;j--){ seed[j]=DMOD(seed[j-1]+tseed,p); } seed[1]=tseed; mci=1; printf("第%d個隨機數的值為%lld\n",j,seed[mci]); } } return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.137.179
idicivik:是不是 mci 沒給初始值導致 mci 的值大過98呢 09/14 20:37
chrisjon:喔喔!!忘了給起始值...感謝 09/14 21:07
ledia:宣告seed[97] 不能用到第 97 個 index, 第一個迴圈就爆了 09/15 00:24
chrisjon:喔喔!!難怪跑出來的值超怪!!感謝 09/15 09:48
chrisjon:剛試了一下,結果一樣...Q.Q 09/15 09:50
ledia:seed[1] = tseed; <--- 是否應該是 seed[i] = tseed; 09/15 10:35
chrisjon:o.o結果應該一樣吧? i-- → i=1不符合i>1 → 跳出, 感謝 09/15 11:28
※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 11:50)
ledia:ah.. 是我沒看清楚 ._. 還有新版 code 嗎? XD 09/15 11:35
VictorTom:小弟我看不懂 "從第303個之的數180個0" 這句話@_@" 09/15 12:04
VictorTom:另外, 綠色那段迴圈看起來沒有機會中止啊?? 09/15 12:09
第303之後的數,計算出來全是0,代表有問題....~.~(少一個"後"字) 修好了,原始程式碼改過,這裡的程式碼忘了改:p ※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 12:25) ※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 12:26)
chrisjon:我是呆子....突然看到有些地方沒修到....Orz 09/15 12:26
chrisjon:printf("...seed[j]")→printf("...seed[mci]") 09/15 12:28
VictorTom:如果一開始mci是init成1, 那麼for 300的那迴圈.... 09/15 12:42
VictorTom:看起來也只會印個3次就跑完了, 哪來300多個結果?_? 09/15 12:43
TeaEEE:直接把b64 seed[97]改成seed[98]試看看 09/15 16:34